下面我只想模拟一个名为TestWrapper的类,并在其上设置'允许'expecations。但是,在设定期望时我会收到错误。当使用easymock并设定期望时,这似乎不会发生
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Before;
import org.junit.Test;
import java.math.BigDecimal;
public class CustomerPaymentProgramConverterTest {
TestWrapper paymentType;
Mockery mockery = new JUnit4Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
@Before
public void setupMethod() {
paymentType = mockery.mock(TestWrapper.class);
}
@Test
public void testFromWebService() {
mockery.checking(new Expectations() {{
//debugger throws error on the line below.
allowing(paymentType.getScheduledPaymentAmount());
will(returnValue(new BigDecimal(123)));
allowing(paymentType.getScheduledPaymentConfirmationNumber());
will(returnValue(121212L));
}});
}
}
TestWrapper.class
//Class I am mocking using JMock
public class TestWrapper {
public java.math.BigDecimal getScheduledPaymentAmount() {
return new BigDecimal(123);
}
public long getScheduledPaymentConfirmationNumber() {
return 123L;
}
}
断言错误..
java.lang.AssertionError: unexpected invocation: paymentProgramScheduledPaymentTypeTestWrapper.getScheduledPaymentAmount()
no expectations specified: did you...
- forget to start an expectation with a cardinality clause?
- call a mocked method to specify the parameter of an expectation?
what happened before this: nothing!
at org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:56)
at org.jmock.Mockery.dispatch(Mockery.java:218)
at org.jmock.Mockery.access$000(Mockery.java:43)
at org.jmock.Mockery$MockObject.invoke(Mockery.java:258)
答案 0 :(得分:3)
您错误地使用了JMock API。它应该是
public void testFromWebService() {
mockery.checking(new Expectations() {{
//debugger throws error on the line below.
allowing(paymentType).getScheduledPaymentAmount();
will(returnValue(new BigDecimal(123)));
allowing(paymentType).getScheduledPaymentConfirmationNumber();
will(returnValue(121212L));
}});
}
这就是说当你调用被测试的方法时(你在测试中似乎没有这样做),你会希望调用这些方法来返回这些值。 PaymentType将是您正在模拟的测试类中的依赖项。
此外,您在@Before方法中有一个compliation错误