자동화 된 통합 테스트에 Junit을 사용할 수 있습니까?
-
08-07-2019 - |
문제
어떻게 자동화합니까? 통합 테스트? 나는이 테스트 중 일부에 Junit을 사용합니다. 이것은 솔루션 중 하나이거나 완전히 잘못입니까? 당신은 무엇을 제안합니까?
해결책
Junit Works. 단위 테스트로만 제한하는 제한은 없습니다. 우리는 Junit, Maven 및 Cruisecontrol을 사용하여 CI를 수행합니다.
통합 테스트에 특정한 도구가있을 수 있지만 유용성은 통합하는 시스템 구성 요소 유형에 달려 있다고 생각합니다. Junit은 비 UI 유형 테스트에서 잘 작동합니다.
다른 팁
많은 통합 테스트를 수행하기 위해 Junit을 사용했습니다. 물론 통합 테스트는 많은 다른 것을 의미 할 수 있습니다. 더 많은 시스템 수준 통합 테스트를 위해 스크립트가 테스트 프로세스를 외부에서 추진하도록하는 것이 좋습니다.
다음은 HTTP 및 데이터베이스를 사용하는 응용 프로그램에 적합한 접근 방식이 있으며 전체 스택을 확인하고 싶습니다.
- 사용
Hypersonic or H2
데이터베이스 대체품으로 메모리 모드에서 (ORMS에 가장 적합함) - 데이터베이스를 초기화하십시오
@BeforeSuite
또는 동등한 (다시 : ORM에서 가장 쉬운) - Jetty를 사용하여 프로세스 내 웹 서버를 시작하십시오.
@Before
각 테스트, 데이터베이스를 지우고 필요한 데이터로 초기화합니다.- 사용
JWebUnit
부두에 대한 HTTP 요청을 실행합니다
이를 통해 데이터베이스 또는 애플리케이션 서버의 설정없이 실행할 수 있고 HTTP 다운에서 스택을 연습 할 수있는 통합 테스트가 제공됩니다. 외부 리소스에 대한 의존성이 없으므로이 테스트는 빌드 서버에서 잘 실행됩니다.
여기에 내가 사용하는 코드 중 일부가 다음과 같습니다.
@BeforeClass
public static void startServer() throws Exception {
System.setProperty("hibernate.hbm2ddl.auto", "create");
System.setProperty("hibernate.dialect", "...");
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setJdbcUrl("jdbc:hsqldb:mem:mytest");
new org.mortbay.jetty.plus.naming.Resource(
"jdbc/primaryDs", dataSource);
Server server = new Server(0);
WebAppContext webAppContext = new WebAppContext("src/main/webapp", "/");
server.addHandler(webAppContext);
server.start();
webServerPort = server.getConnectors()[0].getLocalPort();
}
// From JWebUnit
private WebTestCase tester = new WebTestCase();
@Before
public void createTestContext() {
tester.getTestContext().setBaseUrl("http://localhost:" + webServerPort + "/");
dao.deleteAll(dao.find(Product.class));
dao.flushChanges();
}
@Test
public void createNewProduct() throws Exception {
String productName = uniqueName("product");
int price = 54222;
tester.beginAt("/products/new.html");
tester.setTextField("productName", productName);
tester.setTextField("price", Integer.toString(price));
tester.submit("Create");
Collection<Product> products = dao.find(Product.class);
assertEquals(1, products.size());
Product product = products.iterator().next();
assertEquals(productName, product.getProductName());
assertEquals(price, product.getPrice());
}
더 알고 싶은 사람들을 위해 Jetty 및 Jwebunit과의 임베디드 통합 테스트에 대한 기사 java.net에서.
Maven을 사용하여 프로젝트를 구축 할 때, 나는 조금 더 운이 좋았습니다. testng 왜냐하면 그것은 @BeforeSuite
그리고 @AfterSuite
운영. 통합 테스트가 실패하면 Maven이 '사후 통합 테스트'를 실행하지 않기 때문에 유용합니다. 개미에게는 문제가되지 않으므로 Junit을 선호하지 않습니다.
두 경우 모두 TestNG와 Junit DO 모두로 테스트를 분할하는 것이 통합 테스트에도 도움이됩니다.
여기에서 우리의 작업에서 통합 테스트 솔루션에는 세 가지 주요 부분이 있습니다.
- 크루즈 컨트롤 지속적인 통합 방법론의 기초입니다.
- CruiseControl 구성은 누구나 체크인 한 지 3 분 이내에 빠른 테스트 빌드를 시작합니다. 파괴. 여기서 발생하는 테스트는 "모든 것이 여전히 컴파일됩니까?"입니다. 그리고 "단위 테스트는 여전히 통과합니까?" 주니 분명히 두 번째 질문에 대답하는 주요 촉진자입니다.
- 매 시간마다 다양한 배포 플랫폼에서 사용하는 온라인 도움말과 설치 업체를 구성하는 더 큰 빌드를 시작합니다. 이 단계는 "우리는 여전히 각 대상 플랫폼에 대한 배포 가능한 제품이 있습니까?"라는 더 큰 질문을 확인합니다.
최종 결과는 대부분의 사람들이 통합 테스트에 대해 걱정하지 않는다는 것입니다. 반면에 단위 테스트는 모든 사람의 우선 순위입니다. Junit은 테스트를 쉽게 구성 할 수 있습니다 좋은 테스트에는 항상 생각과 개발 시간이 필요합니다.
예, 통합 테스트에 Junit을 사용할 수 있지만 필요한 통합 테스트 유형에 따라 다릅니다.
서블릿 테스트 :
- 서블릿 컨텍스트 및 구성을 설정하십시오
- Mock Servlet 요청을 사용하여 테스트를 수행하십시오 (Spring은 이에 대한 지원이 있지만 EasyMock 또는 자신의 모의도 사용할 수도 있습니다).
스프링 응용 프로그램 테스트 :
- 컨텍스트를 설정하려면 AbstractDependencyInjectionSpringContextTests를 사용하십시오
- 유선 콩을 테스트하십시오
- 또한 데이터베이스에서 테스트 할 때 트랜잭션 처리를 지원하는 AbstractDependencyInjectionSpringContextTests의 서브 클래스도 있습니다.
그러나 Pure Junit에는 한계가 있습니다. 사용자 인터페이스 테스트는 일반적인 경우입니다. 웹 애플리케이션에는 셀레늄, 웹 서비스 용 SOAPUI 또는 기타 적절한 도구를 사용할 수 있습니다.
그러나 사용하는 것이 무엇이든, 지속적인 빌드 (크루즈 컨트롤, 팀 시티 등)에 통합 할 수 있어야합니다.
분명히! 우리는 주니트, 개미 작업의 조합을 사용하여 실행하고 허드슨 강 계속 통합 테스트를 위해. 매력처럼 작동합니다.
제안은 응용 프로그램과 목표에 따라 다릅니다.
나는 Junit에서 통합 테스트를 작성했지만 사람들은 Htmlunit (Junit Extension), 셀레늄, Watir, Fit/Fitness 및 Winrunner 및 Silk와 같은 상업용 도구를 사용하는 것을 보았습니다.
따라서 도메인과 테스트의 목표에 대해 조금 더 알려 주시면 더 나은 답변을 얻을 수 있습니다.
Jitr이라는 Junit에게는 매우 좋은 확장이 있습니다.
JITR은 Junit Integration Test Runner이며 웹 응용 프로그램 통합 테스트가 테스트와 동일한 JVM의 경량 웹 컨테이너에 대해 쉽게 실행할 수 있습니다.
자세한 내용은 사이트를 참조하십시오. http://www.jitr.org/
2012 년 업데이트 : Junit을 사용할 수 있고 CI 지원의 혜택) Jwebunit 및 Selenium은 통합 테스트를위한 Mindshare를 먹는 것으로 보입니다.
자동화 및 통합 테스트가 생각합니다 함께 잘 연주하지 마십시오. 매우 기본적인 문제는입니다 환경 설정 모든 테스트 전에. 더 많은 통합 유형 테스트 더 큰 설정이 필요합니다.
통합 계층에 대한 테스트 자동화에 대한 나의 생각 : http://blog.aplikacja.info/2012/03/whats-wrong-with-automated-integration-tests/