フレームワークは現在、アプリケーション内でわずかに使用されていますが、jmockit は初めてです。
サービス層の DAO をモックアウトしようとしています。期待値を使用して読み取りメソッドのオブジェクトを返す方法は理解していますが、作成メソッドを使用して作成されたオブジェクトをキャプチャして、それらをテストできるようにしたいと考えています。
どうすればいいですか?
たとえば、DAO には以下が含まれます。
public void create(Person person){
//code to create person here.
}
モックアップして、このメソッドに入ってくる人をキャプチャして、後でテストで質問できるようにしたいと考えています。
フィードバックに基づいて、次を使用してテストを行いました...
@Mocked @NonStrict
private PaymentStubDAO mockPaymentStubDAO;
...
new Expectations() {
{
mockPaymentStubDAO.create((PaymentStub) any);
returns(any);
}
};
...
//set up the verifications
new Verifications() {{
mockPaymentStubDAO.create((PaymentStub) any);
forEachInvocation = new Object() {
@SuppressWarnings("unused")
void validate(PaymentStub stub) {
assertEquals(1, (int)stub.getDaysJuror());
}
};
}};
実行すると、new Verifications() の行で次のエラーが表示されます。
java.lang.AssertionError: Missing 1 invocation to:
Object com.acs.gs.juror.dao.accounting.PaymentStubDAO#create(Object)
with arguments: null
on mock instance: $Impl_PaymentStubDAO@424f8ad5
at com.acs.gs.juror.manager.accounting.impl.AccountingManagerImplTest$2.<init>(AccountingManagerImplTest.java:1925)
at com.acs.gs.juror.manager.accounting.impl.AccountingManagerImplTest.testPayOverUnderLimit(AccountingManagerImplTest.java:1924)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: Missing invocations
at com.acs.gs.juror.manager.accounting.impl.AccountingManagerImplTest$1.<init>(AccountingManagerImplTest.java:1859)
at com.acs.gs.juror.manager.accounting.impl.AccountingManagerImplTest.testPayOverUnderLimit(AccountingManagerImplTest.java:1845)
... 12 more