📄 mockcallsequencetest.groovy
字号:
package groovy.mock.interceptor
import junit.framework.AssertionFailedError
/*
Testing Groovy Mock support for multiple calls to the Collaborator with
demanding one or two methods multiple and and various ranges.
@author Dierk Koenig
*/
class MockCallSequenceTest extends GroovyTestCase {
MockFor mocker
void setUp() {
mocker = new MockFor(Collaborator.class)
}
void testUndemandedCallFailsEarly() {
// no demand here
mocker.use {
def caller = new Caller()
shouldFail(AssertionFailedError.class) { caller.collaborateOne() }
}
}
void testOneDemandedTwoCalledFailsEarly() {
mocker.demand.one { 1 }
mocker.use {
def caller = new Caller()
caller.collaborateOne()
shouldFail(AssertionFailedError.class) { caller.collaborateOne() }
}
}
void testOneDemandedDefaultRange() {
mocker.demand.one(1..1) { 1 }
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
}
}
void testOneDemandedExactRange() {
mocker.demand.one(2..2) { 1 }
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
assertEquals 1, caller.collaborateOne()
shouldFail(AssertionFailedError.class) { caller.collaborateOne() }
}
}
void testOneDemandedRealRange() {
mocker.demand.one(1..2) { 1 }
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
assertEquals 1, caller.collaborateOne()
shouldFail(AssertionFailedError.class) { caller.collaborateOne() }
}
}
void testOneDemandedOptionalRange() {
mocker.demand.one(0..2) { 1 }
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
assertEquals 1, caller.collaborateOne()
shouldFail(AssertionFailedError.class) { caller.collaborateOne() }
}
}
void testTwoDemandedNoRange() {
mocker.demand.one() { 1 }
mocker.demand.two() { 2 }
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
assertEquals 2, caller.collaborateTwo()
shouldFail(AssertionFailedError.class) { caller.collaborateTwo() }
}
}
void testTwoDemandedFirstRangeExploited() {
mocker.demand.one(1..2) { 1 }
mocker.demand.two() { 2 }
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
assertEquals 1, caller.collaborateOne()
assertEquals 2, caller.collaborateTwo()
shouldFail(AssertionFailedError.class) { caller.collaborateTwo() }
}
}
void testTwoDemandedFirstRangeNotExploited() {
mocker.demand.one(1..2) { 1 }
mocker.demand.two() { 2 }
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
assertEquals 2, caller.collaborateTwo()
shouldFail(AssertionFailedError.class) { caller.collaborateTwo() }
}
}
void testTwoDemandedFirstOptionalOmitted() {
mocker.demand.one(0..2) { 1 }
mocker.demand.two() { 2 }
mocker.use {
def caller = new Caller()
assertEquals 2, caller.collaborateTwo()
shouldFail(AssertionFailedError.class) { caller.collaborateTwo() }
}
}
void testMixedDemandedMinimum() {
mocker.demand.one(0..1) { 1 }
mocker.demand.two() { 2 }
mocker.demand.one() { 1 }
mocker.demand.two(0..2) { 2 }
mocker.demand.one() { 1 }
mocker.use {
def caller = new Caller()
assertEquals 2, caller.collaborateTwo()
assertEquals 1, caller.collaborateOne()
assertEquals 1, caller.collaborateOne()
shouldFail(AssertionFailedError.class) { caller.collaborateTwo() }
shouldFail(AssertionFailedError.class) { caller.collaborateOne() }
}
}
void testMixedDemandedMaximum() {
mocker.demand.one(0..1) { 1 }
mocker.demand.two() { 2 }
mocker.demand.one() { 1 }
mocker.demand.two(0..2) { 2 }
mocker.demand.one() { 1 }
mocker.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() {
mocker.demand.one(0..1) { 1 }
mocker.demand.two() { 2 }
mocker.demand.one() { 1 }
mocker.demand.two(0..2) { 2 }
mocker.demand.one() { 1 }
shouldFail(AssertionFailedError.class) { // fails on verify
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
assertEquals 2, caller.collaborateTwo()
shouldFail(AssertionFailedError.class) { caller.collaborateTwo() }
}
}
}
void testRangeDemandedButNotExploitedFailsOnVerify() {
mocker.demand.one(2..4) { 1 }
shouldFail(AssertionFailedError.class) { // fails on verify
mocker.use {
def caller = new Caller()
assertEquals 1, caller.collaborateOne()
}
}
}
void testReversedRangesNotAllowed() {
shouldFail(IllegalArgumentException.class) { mocker.demand.one(1..0) { 1 } }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -