2

継承した Junit テストが機能しなくなりました。PowerMock 1.4.12、Mockito 1.9.0、および Junit 4.8.2 を使用しています。それはしばらく前に機能していましたが、停止しました。私はそれを再び機能させようとしています。

Wanted but not invoked:
clerkReviewPackageHelper.addSubmissionQueue(
    <any>,
    <any>,
    <any>,
    <any>
);
-> at icis.cr.approvefilingdetail.CRFilingToQueuesActionTest.test_post_handled_add_submission_queue(CRFilingToQueuesActionTest.java:47)
Actually, there were zero interactions with this mock.

    at icis.cr.approvefilingdetail.CRFilingToQueuesActionTest.test_post_handled_add_submission_queue(CRFilingToQueuesActionTest.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:312)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:296)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:284)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:209)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:148)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:122)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
    at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
    at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:102)
    at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
    at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:42)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    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)

このテストのコードは次のとおりです。

@Test
public void test_post_handled_add_submission_queue() throws Exception {
    when(request.getMethod()).thenReturn(BaseCRAction.POST);
    when(sessionInfo.getSubmissionId()).thenReturn(SUBMISSION_ID);
    when(crFilingToQueuesForm.getAction()).thenReturn(null);
    crFilingToQueuesAction.executeProcess(actionMapping, crFilingToQueuesForm, request, response);
    verify(clerkReviewPackageHelper, times(0)).removeSubmissionQueue(null);
    **verify(clerkReviewPackageHelper).addSubmissionQueue(any(String.class), any(String.class), any(String.class), any(String.class));**
    verify(actionMapping).findForward(eq(BaseCRAction.FORWARD_SUCCESS_REDIRECT));
}

これは、例外の行から呼び出すメソッドです。

public void addSubmissionQueue(String submissionId, String queueId, String reviewOn, String employeeId) throws BadDBConnection {
Session session = injector.inject();
session.executeNonSelectingCall(clerkReviewPackage.addQueue(submissionId, queueId, reviewOn, employeeId));
session.release();
}

どんな助けでも大歓迎です!

ありがとう、

トム

4

4 に答える 4

1

executeProcess 呼び出しに使用されているように見えますが、現在は呼び出しaddSubmissionQueueていませんが、コードがないexecuteProcessと確実に言うのは困難です。

を呼び出さないことが適切な場合はaddSubmissionQueue、その検証行への参照を単純に削除できます。それを呼び出すことが重要な場合、または特定の状況で呼び出すことが重要な場合は、テストを編集して、verifyそのメソッドの呼び出しが必要なテスト ケースでのみ行が発生するようにします。

Mockito が関与しているため、テストは の実際のコードでaddSubmissionQueueはなく、モックを呼び出していることに注意してください。Mockito ホームページの例でMockito がどのように機能するかについての詳細をお読みください。

于 2013-11-12T21:34:10.273 に答える
0

また、コントローラーメソッドのテストケースを作成しているときにこの問題に直面しました。見逃したのは、宣言されているがセットアップメソッド内で初期化されていないパラメーターをテストメソッドに渡すことです。セットアップメソッドでそれらを実行し、問題を修正しました。

于 2016-12-07T13:21:21.583 に答える
0

あなたのclerkReviewPackageHelperモックは、あなたの呼び出しにまったく関連付けられていないようですexecuteProcessそれは渡されず、渡されたモックのメソッド呼び出しから直接的または間接的に返されないようですexecuteProcess。したがって、そのメソッドの 1 つが によって呼び出されると期待するのは合理的とは思えませんexecuteProcess

あなたがする必要があるのは、呼び出しをexecuteProcess調べて、もしあれば、呼び出されたオブジェクトを見つけることaddSubmissionQueueです。のコードが表示されないためexecuteProcess、これについてサポートを提供することはできません。そうかもしれませんが、@ JeffBowmanが彼の答えで推測したように、そのようなメソッド呼び出しはありません。しかし、他の可能性もあります。

  • addSubmissionQueueが呼び出されるオブジェクトが のパラメータの 1 つである場合は、テストで対応する引数としてexecuteProcessを使用する必要があります。clerkReviewPackageHelper
  • が呼び出されるオブジェクトaddSubmissionQueueが のパラメータの 1 つのフィールドである場合は、 のコンストラクタ、セッター、または を使用してexecuteProcessを注入します。clerkReviewPackageHelpercrFilingToQueuesAction@InjectMocks
  • が呼び出されるオブジェクトがaddSubmissionQueueへの他のパラメータの 1 つでのメソッド呼び出しから取得された場合executeProcess、その呼び出しを return にする必要がありますclerkReviewPackageHelper。これは、その値を何らかのオブジェクトに注入することを意味する場合もあれば、モックでメソッド呼び出しをスタブ化することを意味する場合もあります。たとえば、テストしているメソッドがclerkReviewPackageHelperのような行を呼び出して取得する場合、または同様crFilingToQueuesForm.getHelper()のことを記述する必要がありますwhen(crFilingToQueuesForm.getHelper()).thenReturn(clerkReviewPackageHelper);。もちろん、これよりも複雑になる可能性があります。あなたのコードを見ないとわかりません。

さらにヘルプが必要な場合は、executeProcessメソッドのコードを投稿してください。

于 2013-11-13T05:30:19.917 に答える