현재 프로젝트에서 부작용이없는 확장 가능한 통합 테스트를 생성하기위한 좋은 솔루션을 찾기가 어려워지고 있습니다. 부작용이없는 속성에 대한 약간의 설명 : 주로 데이터베이스에 관한 것입니다. 테스트가 완료된 후 데이터베이스에 변경 사항이 없어야합니다 (상태는 유지되어야 함). 확장 성과 상태 보존이 함께 제공되지는 않지만 더 나은 솔루션을 원합니다.
다음은 일반적인 통합 테스트입니다 (이 테스트는 데이터베이스 계층에 닿음).
public class OrderTests {
List<Order> ordersToDelete = new ArrayList<Order>();
public testOrderCreation() {
Order order = new Order();
assertTrue(order.save());
orderToDelete.add(order);
}
public testOrderComparison() {
Order order = new Order();
Order order2 = new Order();
assertFalse(order.isEqual(order2);
orderToDelete.add(order);
orderToDelete.add(order2);
}
// More tests
public teardown() {
for(Order order : ordersToDelete)
order.delete();
}
}
상상할 수 있듯이이 방법은 테스트 속도가 매우 느립니다. 또한 전체 통합 테스트에 적용될 때 시스템의 작은 부분 만 테스트하는 데 약 5 초가 걸립니다. 적용 범위가 증가하면이 숫자가 증가한다고 상상할 수 있습니다.
그러한 테스트를 작성하는 또 다른 방법은 무엇입니까? 내가 생각할 수있는 한 가지 대안은 클래스 내에서 일종의 전역 변수를 갖는 것이며 모든 테스트 방법은이 변수를 공유합니다. 결과적으로 주문이 생성 및 삭제되는 경우는 거의 없습니다. 더 빠른 테스트 결과. 그러나 이것이 더 큰 문제를 초래한다고 생각합니다. 테스트는 더 이상 격리되지 않으며 테스트를 이해하고 분석하기가 점점 더 어려워집니다.
통합 테스트가 단위 테스트만큼 자주 실행되는 것은 아닙니다. 따라서 성능이 낮을 수 있습니다. 어쨌든 누군가가 확장 성을 향상시키기위한 대안을 생각해내는 것이 좋을 것입니다.