단위 테스트 중에는 단위 테스트를 준비하지 않은 데이터베이스가 아닌 데이터베이스를 사용하여 테스트하지 않아도됩니다. 데이터베이스를 사용한 테스트 및 이와 같이 애플리케이션의 여러 계층을 동시에 테스트하는 것은 일반적으로 통합 테스트 로 간주됩니다 . 단위 테스트를 사용하면 메소드가 수행하는 작업, 다른 매개 변수에 따라 반환되는 작업 및 실패 할 때만 테스트해야합니다.
메소드에서 다른 클래스에서 X 메소드를 호출 할 것으로 예상 됩니다. 이러한 X 메소드를 테스트하지 않으므로 이러한 메소드 를 조롱 해야합니다.
Java로 코드를 작성한다고 가정하면 Mockito 와 같은 훌륭한 조롱 프레임 워크 가 도움이 될 수 있습니다. 당신이 조롱 프레임 워크를 사용하든 아니든간에, 나는 그들이 당신을 많은 시간을 절약 할 것이라고 말하고 적어도 내가 언급 한 것은 실제로 복잡하지 않습니다.
실험을 위해 자신의 모의를 작성하려면 다음 CustomerRepository
클래스 가 있다고 가정하십시오 .
public class CustomerRepository {
public CustomerDTO getCustomer(int id) {
...
}
}
CustomerRepository
다음과 같은 방법으로 자신의 조롱 및 더러운 수업을 작성할 수 있습니다 .
public class MockedCustomerRepository extends CustomerRepository {
public boolean bThrowDatabaseException;
public boolean bReturnNull;
public boolean bReturnCustomerWrongId;
public boolean bReturnCustomerWithId;
public CustomerDTO getCustomer(int id) {
if(bThrowDatabaseException) {
throw new DatabaseException("xxx");
} else if(bReturnNull) {
return null;
} else if(bReturnCustomerWrongId) {
throw new CustomerNotExistException(id);
} else if(bReturnCustomerWithId) {
return new CustomerDTO(id);
}
}
}
그런 다음 테스트 사례에서 기본적으로 "표준"인스턴스 CustomerRepository
를 모의 인스턴스로 바꾸면 다음과 같은 다양한 결과에 대해 메소드를 테스트 할 수 있습니다 getCustomer
.
public class CustomerRestTest {
public void testGetCustomer_databaseFailure() {
MockedCustomerRepository dto = new MockedCustomerRepository();
dto.bThrowDataBaseException = true;
yRestClass rest = new MyRestClass();
rest.dto = dto;
rest.getCustomer(0);
// depending on what you do in your getCustomer method, you should check if you catched the exception, or let it pass, etc.. Make your assertions here
public void testGetCustomer_customerNotExist() {
// etc.
}
}
일반적으로 모든 테스트 방법은 한 가지만 테스트해야하므로 테스트를 작게 유지하고 한 작업에 집중할 수 있습니다.
반복하겠습니다 :-) 전체 조롱 된 클래스를 작성하는 데는 시간이 걸립니다. 조롱 프레임 워크를 사용하는 것이 좋습니다. 코드 작성 횟수가 적을수록 오류가 적습니다 . 예외를 던지거나 주어진 매개 변수에 대해 주어진 값을 반환하는 메서드를 조롱하는 것은 케이크 한 조각이며 2 ~ 3 줄을 차지합니다 (최소한 mockito)
REST 메소드 테스트에 도움이되기를 바랍니다.