📄 stubcallsequencetest.groovy
字号:
package groovy.mock.interceptor
import 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 + -