मैं जॉकिट टेस्ट में मॉकिटो का उपयोग कर रहा हूं। आप एक अपवाद कैसे बनाते हैं और फिर यह कहते हैं कि इसमें (सामान्य छद्म कोड) है
मैं जॉकिट टेस्ट में मॉकिटो का उपयोग कर रहा हूं। आप एक अपवाद कैसे बनाते हैं और फिर यह कहते हैं कि इसमें (सामान्य छद्म कोड) है
जवाबों:
अपवादों को संभालने के लिए अकेले मॉकिटो सबसे अच्छा समाधान नहीं है, कैच-अपवाद के साथ मॉकिटो का उपयोग करें
given(otherServiceMock.bar()).willThrow(new MyException());
when(() -> myService.foo());
then(caughtException()).isInstanceOf(MyException.class);
caughtException
?
com.googlecode.catchexception.CatchException.caughtException;
पहले अपने दूसरे प्रश्न का उत्तर देने के लिए। यदि आप JUnit 4 का उपयोग कर रहे हैं, तो आप अपने परीक्षण को एनोटेट कर सकते हैं
@Test(expected=MyException.class)
यह दावा करने के लिए कि एक अपवाद उत्पन्न हुआ है। और मॉकिटो के साथ "मॉक" एक अपवाद है, उपयोग करें
when(myMock.doSomething()).thenThrow(new MyException());
यदि आप अपवाद संदेश का परीक्षण करना चाहते हैं, तो आप मॉकिटो के साथ JUnit's 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()
यह कहां से आता है?
06/19/2015 के लिए अपडेट किया गया उत्तर (यदि आप java 8 का उपयोग कर रहे हैं)
बस अस्सर का उपयोग करें
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-exception-with-java-.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
खंड सही है, यह एक अपवाद फेंक दिया होगा।
मॉकिटो के डोह्रो का उपयोग करें और फिर बाद में फेंकने के लिए वांछित अपवाद को पकड़ें ।
@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);
}
मॉकिटो का उपयोग करके, आप अपवाद बना सकते हैं।
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());
}
यहां एक नमूना खोजें: अपवाद जून को जोर दें
मॉकिटो से संबंधित, कोई भी अपवाद को पकड़ सकता है और इसके गुणों का पता लगा सकता है। यह सत्यापित करने के लिए कि अपवाद हुआ, अपवाद को फेंकने वाले कथन के बाद कोशिश ब्लॉक के भीतर एक गलत स्थिति का दावा करते हैं।
या यदि आपका अपवाद एक वर्ग के निर्माता से फेंका गया है:
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void myTest() {
exception.expect(MyException.class);
CustomClass myClass= mock(CustomClass.class);
doThrow(new MyException("constructor failed")).when(myClass);
}
अपवाद संदेश द्वारा जोर:
try {
MyAgent.getNameByNode("d");
} catch (Exception e) {
Assert.assertEquals("Failed to fetch data.", e.getMessage());
}