2017-03-24 2 views
2

I持って、私はそれがように例外をスローするかどうかをテストしたい機能:JUnitの「AssertionErrorが」

@Override 
    public WorkOrderTask updateWorkOrderTaskWithOutcome(String taskId, String outcome, WorkOrderTask workOrderTask) { 
     Map<String, Object> variables = new HashMap<>(); 

     if (!outcome.equals(TaskOutcomes.CANCEL.getValue())) { 
      WorkOrderType workOrder = workOrderTask.getWorkOrderPayload().getWorkOrder(); 
      workOrder = workflowDataService.updateWorkOrder(workOrder); 
      workOrderTask.getWorkOrderPayload().setWorkOrder(workOrder); 

      variables = getProcessVariables(workOrder); 
     } 

     try { 
      workflowTaskService.completeTask(taskId, outcome, variables); 
      logger.debug("Updated Task ID: {} with outcome {}", taskId, outcome); 
     } catch (WorkflowException e) { 
      logger.error("Updating Work Order Task ID: {} with outcome {} FAILED", taskId, outcome, e); 
     } 

     return workOrderTask; 
    } 

私はこれだっ書いたテスト:

@Test(expected=WorkflowException.class) 
public void testUpdateWorkOrderTaskForWorkflowException() throws Exception { 
    WorkOrderTask workOrderTask = GrcWorkflowTestUtil.generateWorkOrderTask(); 
    WorkOrderType workOrder = workOrderTask.getWorkOrderPayload().getWorkOrder(); 

    doReturn(workOrder).when(workflowDataService).updateWorkOrder(workOrder);//some mock stubs to avoid calling actual service 
    doThrow(new WorkflowException("test workflow exception")).when(workflowTaskService).completeTask(any(), any(), any());//forcing the exception to be thrown 

    WorkOrderTask workOrderTaskRet = workOrderService.updateWorkOrderTaskWithOutcome(TestEnvironmentUtil.TASK_ID, 
      TaskOutcomes.SUBMIT.getValue(), workOrderTask); 

} 

私がテストを実行すると、workflowExceptionがスローされた(デバッグ)ことがわかりますが、> AssertionError:except例外:workflowExceptionが発生します。

私は一種の類似していた、この質問読みになりました: Testing for Exceptions using JUnit. Test fails even if the Exception is caught

をしかし答えは、私はしたくないものですトライcatchブロックを、スキップしなければならないと述べています。

また、テストの全体的なポイントは、例外がキャッチされていることを確認することです、私はAPIの代わりに実装をテストしているようですが、実際の例外をトリガーしたくはありません実際のサービスを呼び出すために

+0

テストしたメソッドが例外をスローしない場合は、この方法でテストすることはできません。しかし、あなたのコード* loggs *例外とすることができます(そして、あなたのコードの動作をテストする必要があります)。 –

答えて

2

あなたのコードがWorkflowExceptionを確実に受け入れるようにしたいですか? は、しかし、あなたはすでにこのここにある:テストの実行が例外を発生させていない場合は

doThrow(new WorkflowException("test workflow exception")) 
    .when(workflowTaskService).completeTask(any(), any(), any()); 

が、それはこのモック操作で上昇例外がキャッチされたことを意味します。
したがって@Test(expected=WorkflowException.class)は指定しないでください。

モッキング方法が確実に実行されていることを確認したい場合でも、workflowTaskService.completeTask()が呼び出されたことを確認できます。それが呼び出された場合は、例外がスローされたことを意味します。

関連する問題