আমি জুনিট টেস্টে মকিতো ব্যবহার করছি। কীভাবে আপনি একটি ব্যতিক্রম ঘটায় এবং তারপরে এটি দৃsert়ভাবে জানাতে পারেন যে (জেনেরিক সিউডো কোড)
আমি জুনিট টেস্টে মকিতো ব্যবহার করছি। কীভাবে আপনি একটি ব্যতিক্রম ঘটায় এবং তারপরে এটি দৃsert়ভাবে জানাতে পারেন যে (জেনেরিক সিউডো কোড)
উত্তর:
ব্যতিক্রম হ্যান্ডেল করার জন্য একা মকিতো সেরা সমাধান নয়, ক্যাচ-এক্সেপশন সহ মকিতো ব্যবহার করুন
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)
একটি ব্যতিক্রম ঘটেছে যে দৃsert়তা। এবং মকিতো সহ একটি ব্যতিক্রম "উপহাস" করতে, ব্যবহার করুন
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 এর জন্য আপডেট উত্তর (আপনি যদি জাভা 8 ব্যবহার করছেন)
শুধু assertj ব্যবহার করুন
Assertj-core-3.0.0 + জাভা 8 লাম্বডাস ব্যবহার করা হচ্ছে
@Test
public void shouldThrowIllegalArgumentExceptionWhenPassingBadArg() {
assertThatThrownBy(() -> myService.sumTingWong("badArg"))
.isInstanceOf(IllegalArgumentException.class);
}
তথ্যসূত্র: http://blog.codeleak.pl/2015/04/junit-testing- ধারণার সাথে- 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();
যদি আপনার পরীক্ষাটি মধ্যবর্তী কোড ব্যতিক্রমকে পরিচালনা করে তা প্রমাণ করার জন্য ডিজাইন করা হয় তবে পরবর্তী বিকল্পটি প্রয়োজনীয় the
verify
কল কি ব্যতিক্রম দৃsert়তা দেয়?
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());
জুনিট 5 ব্যবহার করে, আপনি ব্যতিক্রম দৃsert় করতে পারেন, জোর দিয়েছিলেন যে পরীক্ষার পদ্ধতিটি চালু করার সময় সেই ব্যতিক্রম নিক্ষিপ্ত হয় কিনা ।
@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());
}