stubcallsequencetest.groovy

来自「大名鼎鼎的java动态脚本语言。已经通过了sun的认证」· GROOVY 代码 · 共 198 行

GROOVY
198
字号
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 + =
减小字号Ctrl + -
显示快捷键?