2014-03-19 2 views
1

다른 시나리오의 TestMethod가 다른 설정을 가지고 있고 하나의 설정이 TestMethod에 의존하기 때문에 @BeforeMethod @ TestMethod에 종속성을 부여 할 방법이 있습니까? 더 나은 이해를 위해 여기 때문에@BeforeMethod에 그룹화 및 종속성을 추가하는 방법

@BeforeMethod(groups = {"gp2"}) 
public void setUp1() { 
    System.out.println("SetUp 1 is done"); 
} 

@BeforeMethod(groups = {"gp1"}, dependsOnGroups = {"tgp1"}) 
public void setUp2() { 
    System.out.println("SetUp 2 is done"); 
} 

@Test(timeOut = 1, groups = {"tgp1"}) 
public void testMethod() throws InterruptedException { 
    Thread.sleep(2000); 
    System.out.println("TestMethod() From Group1"); 
} 

@Test(dependsOnMethods = {"testMethod"}, groups = {"tgp2"}) 
public void anotherTestMethod() { 
    System.out.println("AnotherTestMethod()From Group1 and Group2"); 
} 

설정 1 설정 2

을 수행하지만 카메라 설정을 (필요 수행

출력) 실행해야하지 카메라 설정()을 몇 가지 코드를 추가 tgp1 그룹에 따라 다릅니다.

나는이 실행이에 있어야합니다 필요 내가

setUp2() is depending on method public void testMethod() throws java.lang.InterruptedException, which is not annotated with @Test or not included. 

같은 예외를 가지고

@BeforeMethod(groups = {"gp1"}, dependsOnGroups = {"tgp1"}) 

다음

@BeforeMethod(groups = {"gp1"}, dependsOnMethods = {"testMethod"}) 

에에서 종속성을 변경하는 경우 나, 관찰 또 다른 것은 단계

SetUp1 ----> testMethod1() -------> SetUp2 ---------> testMethod2()

다른 TestMethod의 작업이 다르며 다른 SetUp().

+0

이 종속성으로 달성하려는 것을 설명해 주시겠습니까? 또한 테스트를 시작하는 방법에 대한 구성이나 설명을 추가 할 수 있다면 도움이 될 것입니다. – artdanil

답변

0

각 테스트마다 공통적으로 @BeforeMethod이 없으므로 각 테스트 메소드에서 각각의 setUp 메소드를 호출 할 수 있습니다.

또는이 두 테스트를 각각 @BeforeMethod이있는 다른 테스트 클래스로 구분할 수 있습니다.

또는 다음과 같이 @BeforeMethod 메서드를 사용하여 테스트 메서드 이름을 기반으로 조건부 설치 호출을 수행 할 수 있습니다. 여기서 @BeforeMethodjava.lang.reflect.Method 유형의 매개 변수를 선언 할 수 있습니다. 이 매개 변수는 일단 @BeforeMethod가 끝나면 호출 될 테스트 메소드를 수신합니다.

@BeforeMethod 
public void setUp(Method method) { 
    if (method.getName().equals("testMethod")) { 
     setUp1(); 
    } else if (method.getName().equals("anotherTestMethod")) { 
     setUp2(); 
    } 
} 

public void setUp2() { 
    System.out.println("SetUp 2 is done"); 
} 

public void setUp1() { 
    System.out.println("SetUp 1 is done"); 
}  
+0

도움을 주셔서 감사합니다. 이미이 상황을 피하기 위해이 작업을 수행합니다. ---- :)하지만 내 질문 내가 @BeforeMethod를 사용하고 TestNG 프레임 워크 문서에 따라 Test Method를 제공하기 위해이 메소드를 제공하기 때문에 내가 원하는 것을 수행하는 방법으로 이스케이프하지 않아야한다. ..... 이것에 대한 적절한 이유를 이해하도록 도울 수있다. . 도와 주셔서 감사합니다. –

+1

Method 매개 변수로 응답을 업데이트했습니다. 이게 도움이 되었으면 좋겠어요 – devikiran

+0

예, 정말 고마워요. 감사합니다. –

0

@BeforeMethod의 목적은 각 시험 방법 앞에 @Test으로 주석을 달고 일부 설정 작업을 수행하는 것입니다. 따라서 다른 방법으로 작동하는 종속성을 생성하려는 이유가 다소 혼란 스럽습니다. 설정 방법 이전에 테스트 메소드를 실행하십시오. 일반적인 접근 방식은 다음과 같다 :

@BeforeMethod 
public void setUp() { 
} 

@Test 
public void testMethod1() { 
} 

@Test 
public void testMethod2() { 
} 

어떤 가능성이 가장 높은 다음 실행 목록을 생성합니다

설정()
testMethod1()
설정()
testMethod2()를

여러 개의 @BeforeMethods이있는 경우 모두 전에 실행됩니다. @Test 방법.

다른 그룹을 실행하려면 다른 방법으로 다른 그룹에 주석을 달고 실행할 그룹을 지정해야합니다. 그러나이를 위해서는 testng.xml을 제공하거나 실행할 그룹을 지정해야합니다.


편집 (추가 코멘트 기준) :

나는 다음과 같은 방법 중 하나를 제안 : 다른 클래스로

  1. 별도의 시험 방법을 각 클래스의 @BeforeMethod 수행해야 필수 설정.테스트가다른 영역을 다루는 경우 특히 그렇습니다.
  2. 다른 그룹을 정의하고 은 동일한 그룹에 해당 테스트 및 설정 방법을 넣습니다. 이 옵션을 사용하면 설치 방법과 테스트 방법을 혼합 할 수 있습니다.

질문에서 불분명하지만, 만약 관련 제안 방식에서 혜택을 누릴 수있는 몇 가지 :

  • 가 거기에 의존성에 필요한?
  • 주문이나 테스트가 중요합니까?
+0

당신의 도움을 주셔서 감사합니다 ........ 다른 TestMethods가 다른 작업을하고 다른 SetUp()이 필요하기 때문에 실제로 당신의 의견과 조언을 주셔서 감사합니다. SetUp1()이 필요합니다 ------ testMethod () -------- SetUp2() --------- testMethod2() .... –

관련 문제