2011-04-23 16 views
15

隨着JMock的:關於使用(任何(Class.class)))與JMock的

java.lang.IllegalArgumentException異常:不是所有的參數

context.checking(new Expectations() {{ 
    // Other oneOf() will() statements ... 

    oneOf(shopAccount).enter(100, with(any(String.class))); 
    will(returnValue(true)); 

    // Other oneOf() will() statements ... 
}}); 

以下異常將在執行過程中引發的被賦予了明確的匹配器:或者所有參數必須由匹配器指定,或者全部必須由值指定,您不能混合匹配器和值。

爲什麼我不能這樣做?使用with(any(Klass.class))

回答

19

如果使用with子句的任何參數,則必須使用他們的所有參數,儘量

oneOf(shopAccount)。進入(用(equalTo(100)),與(任何(String.class)));

+1

是不是'with(equal(100))',not'equalTo'? – Lukas 2013-01-28 20:28:10

+0

你是指'equals()',那麼這是返回布爾值的Object上的一個方法。 'equalto()'是一個返回匹配器的靜態匹配器方法。 – 2013-02-27 16:35:41

+1

@Lukas'org.jmock.Expectations.equal(T)'和'org.hamcrest.core.IsEqual.equalTo(T)'等價定義(至少在版本jmock-2.5.1和junit-4.8.2中) ,所以兩者都可以工作。 – 2013-03-07 01:40:26