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の代わりに実装をテストしているようですが、実際の例外をトリガーしたくはありません実際のサービスを呼び出すために
テストしたメソッドが例外をスローしない場合は、この方法でテストすることはできません。しかし、あなたのコード* loggs *例外とすることができます(そして、あなたのコードの動作をテストする必要があります)。 –