문제

어떻게 자동화합니까? 통합 테스트? 나는이 테스트 중 일부에 Junit을 사용합니다. 이것은 솔루션 중 하나이거나 완전히 잘못입니까? 당신은 무엇을 제안합니까?

도움이 되었습니까?

해결책

Junit Works. 단위 테스트로만 제한하는 제한은 없습니다. 우리는 Junit, Maven 및 Cruisecontrol을 사용하여 CI를 수행합니다.

통합 테스트에 특정한 도구가있을 수 있지만 유용성은 통합하는 시스템 구성 요소 유형에 달려 있다고 생각합니다. Junit은 비 UI 유형 테스트에서 잘 작동합니다.

다른 팁

많은 통합 테스트를 수행하기 위해 Junit을 사용했습니다. 물론 통합 테스트는 많은 다른 것을 의미 할 수 있습니다. 더 많은 시스템 수준 통합 테스트를 위해 스크립트가 테스트 프로세스를 외부에서 추진하도록하는 것이 좋습니다.

다음은 HTTP 및 데이터베이스를 사용하는 응용 프로그램에 적합한 접근 방식이 있으며 전체 스택을 확인하고 싶습니다.

  1. 사용 Hypersonic or H2 데이터베이스 대체품으로 메모리 모드에서 (ORMS에 가장 적합함)
  2. 데이터베이스를 초기화하십시오 @BeforeSuite 또는 동등한 (다시 : ORM에서 가장 쉬운)
  3. Jetty를 사용하여 프로세스 내 웹 서버를 시작하십시오.
  4. @Before 각 테스트, 데이터베이스를 지우고 필요한 데이터로 초기화합니다.
  5. 사용 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 모두로 테스트를 분할하는 것이 통합 테스트에도 도움이됩니다.

여기에서 우리의 작업에서 통합 테스트 솔루션에는 세 가지 주요 부분이 있습니다.

  1. 크루즈 컨트롤 지속적인 통합 방법론의 기초입니다.
  2. CruiseControl 구성은 누구나 체크인 한 지 3 분 이내에 빠른 테스트 빌드를 시작합니다. 파괴. 여기서 발생하는 테스트는 "모든 것이 여전히 컴파일됩니까?"입니다. 그리고 "단위 테스트는 여전히 통과합니까?" 주니 분명히 두 번째 질문에 대답하는 주요 촉진자입니다.
  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/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top