私はjunitテストでmockitoを使用しています。どのようにして例外を発生させ、それが(一般的な疑似コード)を持っていると断言しますか
私はjunitテストでmockitoを使用しています。どのようにして例外を発生させ、それが(一般的な疑似コード)を持っていると断言しますか
回答:
Mockitoだけでは例外の処理に最適なソリューションではありません。Cock -ExceptionでMockitoを使用してください
given(otherServiceMock.bar()).willThrow(new MyException());
when(() -> myService.foo());
then(caughtException()).isInstanceOf(MyException.class);
caughtException
?
com.googlecode.catchexception.CatchException.caughtException;
最初に2番目の質問に答えます。JUnit 4を使用している場合は、テストに注釈を付けることができます
@Test(expected=MyException.class)
例外が発生したと断言します。そして、mockitoで例外を「モック」するには、次を使用します。
when(myMock.doSomething()).thenThrow(new MyException());
例外メッセージもテストしたい場合は、MockitoでJUnitのExpectedExceptionを使用できます。
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void testExceptionMessage() throws Exception {
expectedException.expect(AnyException.class);
expectedException.expectMessage("The expected message");
given(foo.bar()).willThrow(new AnyException("The expected message"));
}
given()
これはどこから来たのですか?
2015年6月19日の回答を更新(Java 8を使用している場合)
assertjを使用するだけ
assertj-core-3.0.0 + Java 8 Lambdasの使用
@Test
public void shouldThrowIllegalArgumentExceptionWhenPassingBadArg() {
assertThatThrownBy(() -> myService.sumTingWong("badArg"))
.isInstanceOf(IllegalArgumentException.class);
}
リファレンス:http : //blog.codeleak.pl/2015/04/junit-testing-exceptions-with-java-8.html
JUnit 4とMockito 1.10.xを使用している場合、テストメソッドに次のアノテーションを付けます。
@Test(expected = AnyException.class)
そして、あなたが望む例外を投げるには:
Mockito.doThrow(new AnyException()).when(obj).callAnyMethod();
このように例外を発生させます:
when(obj.someMethod()).thenThrow(new AnException());
テストがそのような例外をスローすることをアサートして、それが発生したことを確認します。
@Test(expected = AnException.class)
または通常の模擬検証:
verify(obj).someMethod();
中間コードが例外を処理することをテストが設計する場合は、後者のオプションが必要です(つまり、テストメソッドから例外がスローされません)。
verify
例外アサート呼び出しは?
when
句が正しければ、例外がスローされているはずです。
MockitoのdoThrowを使用し、必要な例外をキャッチして、後でスローされたことをアサートします。
@Test
public void fooShouldThrowMyException() {
// given
val myClass = new MyClass();
val arg = mock(MyArgument.class);
doThrow(MyException.class).when(arg).argMethod(any());
Exception exception = null;
// when
try {
myClass.foo(arg);
} catch (MyException t) {
exception = t;
}
// then
assertNotNull(exception);
}
mockitoを使用すると、例外を発生させることができます。
when(testingClassObj.testSomeMethod).thenThrow(new CustomException());
Junit5を使用して、例外をアサートし、テストメソッドが呼び出されたときにその例外がスローされるかどうかをアサートできます。
@Test
@DisplayName("Test assert exception")
void testCustomException(TestInfo testInfo) {
final ExpectCustomException expectEx = new ExpectCustomException();
InvalidParameterCountException exception = assertThrows(InvalidParameterCountException.class, () -> {
expectEx.constructErrorMessage("sample ","error");
});
assertEquals("Invalid parametercount: expected=3, passed=2", exception.getMessage());
}
ここでサンプルを検索:例外junitをアサート