2012-06-01 36 views
6

我想测试被调用模拟方法具有不同参数的方法:JMock的 - 几个调用使用不同的参数

public void methodToTest(){ 
    getMock().doSomething(1); 
    getMock().doSomething(2); 
    getMock().doSomething(3); 
} 

在我的单元测试,我想知道,如果methodToTest真的呼吁与这些人恰恰方法这些论据。这是我写的代码:

@Test 
public void myMockTest(){ 
    oneOf(mock).doSomething(1); 
    oneOf(mock).doSomething(2); 
    oneOf(mock).doSomething(3); 
} 

(2)我得到一个“意外的调用” - 就好像它无法区分不同的参数一样。所以,我已经试过了一个:

exactly(3).of(mock).doSomething(with(Matchers.anyOf(same(1), same(2), same(3)))); 

但这也没做什么,我的预期。

最后,一个工作:

exactly(3).of(mock).doSomething(with(any(Integer.class))); 

所以我知道,我的方法与任何整数号码呼叫3次。有没有什么办法可以确定,它的恰恰是我已经通过的论点?

+0

那么,发布的代码工作得很好。 JMock似乎有铸造对象的问题,虽然..解决了迄今。 –

+0

什么是铸造问题?你能给我们更多的细节吗? –

+0

现在这个问题解决了吗? –

回答

2

您是否用检查区块来包围期望?

context.checking(new Expectations() {{ 
    oneOf(mock).doSomething(1); 
    oneOf(mock).doSomething(2); 
    oneOf(mock).doSomething(3); 
}}); 

此外,你是否知道jmock不强制执行顺序,除非你明确这样做?

+0

我使用了正确的语法,JMock使用默认序列,而不必这么说。我仍然不确定,是什么导致了这些问题 - 我正在使用一个列表并添加一个元素。声明相等的对象和list.get(0)得到的对象返回false,尽管它是同一个对象。在我的对象类中覆盖equals/hashcode解决了这个问题。 –

相关问题