关于with(任何(Class.class)))与JMock

elf*_*elf 18 java testing jmock

使用JMock:

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

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

   // Other oneOf() will() statements ...
}});
Run Code Online (Sandbox Code Playgroud)

执行期间将引发以下异常:

java.lang.IllegalArgumentException:并非所有参数都被赋予显式匹配器:要么所有参数都必须由匹配器指定,要么所有参数都必须由值指定,您不能混合使用匹配器和值.

为什么我不能这样做?用with(any(Klass.class))

Ste*_*man 20

如果with对任何参数使用子句,则必须将它们用于所有参数,请尝试

oneOf(shopAccount).enter(with(equalTo(100)),with(any(String.class)));

  • 不是吗?(​​等于(100))`,而不是`equalTo`? (3认同)
  • @Lukas`org.jmock.Expectations.equal(T)`和`org.hamcrest.core.IsEqual.equalTo(T)`是等价定义的(至少在版本jmock-2.5.1和junit-4.8.2中),所以要么工作. (2认同)