📄 stubcallsequencetest.groovy
字号:
package groovy.mock.interceptorimport junit.framework.AssertionFailedError/** Testing Groovy Stub support for multiple calls to the Collaborator with demanding one or two methods multiple and and various ranges. @author Dierk Koenig*/class StubCallSequenceTest extends GroovyTestCase { StubFor stub void setUp() { stub = new StubFor(Collaborator.class) } void testUndemandedCallFailsEarly() { // no demand here stub.use { def caller = new Caller() shouldFail(AssertionFailedError.class) { caller.collaborateOne() } } } void testOneDemandedTwoCalledFailsEarly() { stub.demand.one { 1 } stub.use { def caller = new Caller() caller.collaborateOne() shouldFail(AssertionFailedError.class) { caller.collaborateOne() } } } void testOneDemandedDefaultRange() { stub.demand.one(1..1) { 1 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() } } void testOneDemandedExactRange() { stub.demand.one(2..2) { 1 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 1, caller.collaborateOne() shouldFail(AssertionFailedError.class) { caller.collaborateOne() } } } void testOneDemandedRealRange() { stub.demand.one(1..2) { 1 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 1, caller.collaborateOne() shouldFail(AssertionFailedError.class) { caller.collaborateOne() } } } void testOneDemandedOptionalRange() { stub.demand.one(0..2) { 1 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 1, caller.collaborateOne() shouldFail(AssertionFailedError.class) { caller.collaborateOne() } } } void testTwoDemandedNoRange() { stub.demand.one() { 1 } stub.demand.two() { 2 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() shouldFail(AssertionFailedError.class) { caller.collaborateTwo() } } } void testTwoDemandedFirstRangeExploited() { stub.demand.one(1..2) { 1 } stub.demand.two() { 2 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() shouldFail(AssertionFailedError.class) { caller.collaborateTwo() } } } void testTwoDemandedFirstRangeNotExploited() { stub.demand.one(1..2) { 1 } stub.demand.two() { 2 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() shouldFail(AssertionFailedError.class) { caller.collaborateTwo() } } } void testTwoDemandedFirstOptionalOmitted() { stub.demand.one(0..2) { 1 } stub.demand.two() { 2 } stub.use { def caller = new Caller() assertEquals 2, caller.collaborateTwo() shouldFail(AssertionFailedError.class) { caller.collaborateTwo() } } } void testMixedDemandedMinimumOutOfSequence() { stub.demand.one(0..1) { 1 } stub.demand.two() { 2 } stub.demand.one() { 1 } stub.demand.two(0..2) { 2 } stub.demand.one() { 1 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 1, caller.collaborateOne() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() assertEquals 2, caller.collaborateTwo() } stub.expect.verify() } void testMixedDemandedMaximum() { stub.demand.one(0..1) { 1 } stub.demand.two() { 2 } stub.demand.one() { 1 } stub.demand.two(0..2) { 2 } stub.demand.one() { 1 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() assertEquals 1, caller.collaborateOne() // 2.times( assertEquals(2, caller.collaborateTwo()) ) // todo: why this not possible? assertEquals 2, caller.collaborateTwo() assertEquals 2, caller.collaborateTwo() assertEquals 1, caller.collaborateOne() shouldFail(AssertionFailedError.class) { caller.collaborateTwo() } shouldFail(AssertionFailedError.class) { caller.collaborateOne() } } } void testMixedDemandedOutOfSequenceFailsEarly() { stub.demand.one(0..1) { 1 } stub.demand.two() { 2 } stub.demand.one() { 1 } stub.demand.two(0..2) { 2 } stub.demand.one() { 1 } shouldFail(AssertionFailedError.class) { // fails on verify stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() shouldFail(AssertionFailedError.class) { caller.collaborateTwo() } } } } void testRangeDemandedOutOfSequenceCalls() { stub.demand.one(0..3) { 1 } stub.demand.two(0..3) { 2 } stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() assertEquals 1, caller.collaborateOne() assertEquals 2, caller.collaborateTwo() shouldFail(AssertionFailedError.class) { caller.collaborateOne() } } stub.expect.verify() } void testUnreachedDemandFailsOnVerify() { stub.demand.one { 1 } // nothing used shouldFail(AssertionFailedError.class) { stub.expect.verify() } } void testRangeDemandedButNotExploitedFailsOnVerify() { stub.demand.one(2..4) { 1 } shouldFail(AssertionFailedError.class) { // fails on verify stub.use { def caller = new Caller() assertEquals 1, caller.collaborateOne() } stub.expect.verify() } } void testReversedRangesNotAllowed() { shouldFail(IllegalArgumentException.class) { stub.demand.one(1..0) { 1 } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -