【问题标题】:jMock - allowing() a call multiple times with different resultsjMock - 允许()多次调用不同的结果
【发布时间】:2015-03-20 10:49:48
【问题描述】:

我想多次致电allowing() 并提供不同的结果。但我发现第一个 allowing() 规范吸收了所有调用,我无法更改返回值。

@Test
public void example() {
    timeNow(100);
    // do something

    timeNow(105);
    // do something else
}

private void timeNow(final long timeNow) {
    context.checking(new Expectations() {{
        allowing(clock).timeNow(); will(returnValue(timeNow));
    }});
}

如果我将 allowing(clock) 更改为 oneOf(clock) 它工作正常。但理想情况下,我想使用allowing(),而不是过度指定时钟只调用一次。有什么办法吗?

【问题讨论】:

  • 如果你使用了 mockito,它会很容易指定......不过,使用 jmock,不知道,抱歉
  • Mockito 很灵活,但实际上我发现 jMock 的挑剔通常很有用:如果在 jMock 中很难做到,那就意味着你的设计很糟糕。在这种情况下,我认为我的设计还可以,而 jMock 让我失望了。 :(

标签: java jmock


【解决方案1】:

我建议您查看states - 它们允许您根据测试所处的“状态”更改要使用的期望。

@Auto private States clockState;
@Test
public void example() {
    clockState.startsAs("first");
    timeNow(100);
    // do something

    clockState.become("second");
    timeNow(105);
    // do something else
}

private void timeNow(final long timeNow) {
    context.checking(new Expectations() {{
        allowing(clock).timeNow(); will(returnValue(timeNow));
        when(clockState.is("first"));

        allowing(clock).timeNow(); will(returnValue(timeNow + 100));
        when(clockState.is("second"));
    }});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多