2014-11-03 2 views
0

각기 다른 방식으로 구현되는 두 개의 클래스가 있지만 테스트는 모두 동일합니다. 각 클래스는 병렬로 실행되는 경우 다른 클래스에 영향을 줄 수있는 몇 가지 작업을 수행하므로 병렬로 실행할 수 없습니다. (아래 코드의 이유)TestNG에서 그룹 순서를 유지하는 방법

두 클래스를 실행하는 경우 Eclipse에서 TestNG 테스트로 먼저 ClassAAA 테스트의 test1 및 test2를 실행 한 다음 동일한 테스트를 실행해야합니다. ClassBBB의 그룹 주석은 ClassAAA의 주석에 의존하기 때문에 ClassBBB에 대한 메소드가 필요합니다.
그러나 겉으로보기에는 TestNG가 다른 방식으로보고 있으며, "겉으로보기에", 그룹 순서를 무시하고 두 클론의 테스트를 병렬로 실행한다는 것입니다.

class Both { 

    @Test(groups={"base"}) 
    public static abstract class BothBase { 

     @Test public void test1() { System.out.println("test1"+name()); }    
     @Test public void test2() { System.out.println("test2"+name()); } 

     protected String name() { 
      String s = getClass().getName(); 
      s = s.substring(1 + s.lastIndexOf("$")); 
      return " - " + s; 
     } 
    } 

    @Test(groups={"gr1"}) 
    public static class ClassAAA extends BothBase { } 

    @Test(groups={"gr2"},dependsOnGroups={"gr1"}) 
    public static class ClassBBB extends BothBase { } 
} 

출력은 "힘"을 시도하는 내가 좋아하지 않는

test1 - ClassAAA 
test1 - ClassBBB 
test2 - ClassAAA 
test2 - ClassBBB 

한 가지 방법은, 그것이 원하는 그룹 순서를 존중하기에 더미 시험 방법을 추가하는 것입니다

@Test(groups={"gr1"}) 
    public static class ClassAAA extends BothBase { 
     @Test public void dummyTestMustBeInAllLeavesToEnforceGroupOrder() { 
      System.out.println("dummyTestMustBeInAllLeavesToEnforceGroupOrder"+name()); 
     } 
    } 

    @Test(groups={"gr2"},dependsOnGroups={"gr1"}) 
    public static class ClassBBB extends BothBase { 
     @Test public void dummyTestMustBeInAllLeavesToEnforceGroupOrder() { 
      System.out.println("dummyTestMustBeInAllLeavesToEnforceGroupOrder"+name()); 
     } 
    } 

이것은 여전히 ​​예상 한대로 완전하게 수행되지 않습니다. 출력은 다음과 같습니다.

test1 - ClassAAA 
test2 - ClassAAA 
test2 - ClassBBB 
dummyTestMustBeInAllLeavesToEnforceGroupOrder - ClassAAA 
test1 - ClassBBB 
dummyTestMustBeInAllLeavesToEnforceGroupOrder - ClassBBB 

이것은 ClassAAA 테스트를 완료하기 전에 ClassBBB 테스트를 실행하기 시작했음을 의미합니다.
나는 각각에 더미/비 관련 메소드를 추가해야만 TestNG가 병렬로 실행할 수 없다는 것을 이해할 수 없다는 사실을 좋아하지 않는다. 실제로 어떤 클래스가 먼저 실행되는지 신경 쓰지 않아요. 그리고 저는 여전히 그들이 병렬로 실행되기 때문에 제가 원하는 것을 성취하지 못했습니다.

내 목표를 달성 할 수있는 가장 바보 같은 방법은 기본 클래스에서 각 리프 클래스로 테스트를 이동하는 것입니다. TestNG에서 이러한 작업을 수행하는 방법은 무엇입니까?

다른 방법이 있습니까? 누군가가 우선 순위를 제안 할 것이라고 확신합니다. 그러나 다시 말해, 진정한 의도를 전달하지 않습니다. 우선 순위가 없습니다. 단지 병렬로 실행하지 않기를 바랍니다. 또한 XML 파일을 작성하고 싶지 않습니다 ...

답변

0

이 문제는 정적 내부 클래스 때문에 발생합니다. 코드 아래에보십시오 당신이 출력을

import org.testng.annotations.Test; 


    @Test(groups={"base"}) 
    public abstract class BothBase { 

     @Test public void test1() { System.out.println("test1"+name()); }    
     @Test public void test2() { System.out.println("test2"+name()); } 

     protected String name() { 
      String s = getClass().getName(); 
      s = s.substring(1 + s.lastIndexOf("$")); 
      return " - " + s; 
     } 
    } 

    @Test(groups={"gr1"}) 
     class ClassAAA extends BothBase { } 

    @Test(groups={"gr2"},dependsOnGroups={"gr1"}) 
     class ClassBBB extends BothBase { } 
+0

어떻게 이클립스에서 실행합니까? 내가 (실행 구성에서 ...) 그룹 단추를 선택했지만 어떤 그룹을 입력 한 다음 실행하면 항상 0 개의 테스트가 실행됩니다. – inor

+0

클래스를 파일을 분리하여 public으로 다시 이동합니다. –

0

많은 방법

간단한 필요 얻을 것이다 - 우선 순위를

열심히 비트 (그룹)

확인 TestNG를 매뉴얼 (예 :이 http://www.mkyong.com/tutorials/testng-tutorials/.).

+0

그룹과 함께했습니다. 일하지 마라. 테스트 매뉴얼에서 정확히 무엇을 찾아야합니까? – inor

+0

http://stackoverflow.com/questions/11503743/running-test-methods-one-after-other-in-testng 및 http://www.mkyong.com/unittest/testng-groups-example/ – SkorpEN

관련 문제