Mockito Mock Void 메서드
대부분의 경우 Mockito when()
메서드는 객체의 동작을 조롱하기에 충분합니다. 그러나 void 메서드를 조롱해야 하는 경우에는 when()
을 사용할 수 없습니다.
Mockito Mock Void 메서드
Mockito는 void 메서드를 조롱하는 데 사용할 수 있는 다음 메서드를 제공합니다.
doAnswer()
: void를 반환하는 모의 개체 메서드가 호출될 때 일부 작업을 수행하는 데 사용할 수 있습니다.doThrow()
: 예외를 발생시키는 void 메서드를 스텁(stub)하려는 경우 doThrow()를 사용할 수 있습니다.
테스트 클래스에서 조롱할 void 메서드가 있는 간단한 클래스를 만들어 봅시다.
package com.journaldev;
public class Employee {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
if (name == null)
throw new IllegalArgumentException("Employee Name can't be null");
this.name = name;
}
}
Mockito 모의 void 메서드 예제
Mockito doAnswer() 메서드는 Answer
를 인수로 사용합니다. 구현을 위한 람다 식입니다.
doAnswer((i) -> {
System.out.println("Employee setName Argument = " + i.getArgument(0));
assertTrue("Pankaj".equals(i.getArgument(0)));
return null;
}).when(emp).setName(anyString());
return null
문은 void 메서드를 모의하기 때문에 필요합니다.
예외가 있는 Mockito 모의 무효 메서드
아래 코드 조각은 doThrow() 메서드를 사용하여 예외가 있는 void 메서드를 모의하는 방법을 보여줍니다.
doThrow(IllegalArgumentException.class).when(emp).setName(null);
JUnit Mockito 모의 void 메서드 예제
다음은 Mockito를 사용하여 void 메서드를 조롱하는 JUnit의 완전한 예입니다.
package com.journaldev.mockito.voidmethod;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.jupiter.api.Test;
import com.journaldev.Employee;
class JUnitMockitoVoidMethod {
@Test
void test_mockito_void() {
Employee emp = mock(Employee.class);
doThrow(IllegalArgumentException.class).when(emp).setName(null);
doAnswer((i) -> {
System.out.println("Employee setName Argument = " + i.getArgument(0));
assertTrue("Pankaj".equals(i.getArgument(0)));
return null;
}).when(emp).setName(anyString());
when(emp.getName()).thenReturn("Pankaj");
assertThrows(IllegalArgumentException.class, () -> emp.setName(null));
emp.setName("Pankaj");
assertEquals("Pankaj", emp.getName());
}
}
TestNG Mockito void 메서드 예제
JUnit 5와 TestNG 주석은 매우 유사하기 때문에 JUnit 5에서 TestNG로 전환하기 위해 위 클래스의 코드별 변경 사항이 필요하지 않습니다. JUnit 5 가져오기 문을 제거하고 아래 가져오기를 추가하여 테스트 프레임워크를 JUnit에서 TestNG로 변경하십시오.
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertThrows;
import static org.testng.Assert.assertTrue;
import org.testng.annotations.Test;
GitHub 리포지토리에서 전체 프로젝트 코드를 다운로드할 수 있습니다.