2011-08-01 3 views
1

나는 전략 패턴으로 programm를 구현했다. 그래서 나는 어떤 곳에서 사용되는 인터페이스를 가지고 있으며 구체적인 구현은 대체 될 수있다.TestNG 클래스의 생성자에 매개 변수를 삽입하는 방법은 무엇입니까?

이제이 프로그램을 테스트하고 싶습니다. 나는 비슷한 방식으로 그것을하고 싶다. 인터페이스에 대해 테스트하는 테스트를 한 번 작성하십시오. 테스트를 시작할 때 콘크리트 인터페이스 구현을 주입해야하므로 쉽게 대체 할 수 있습니다.

내 TestClass에이 사람과 유사합니다

public class MyTestClass { 

    private StrategeyInterface strategy; 

    public MyTestClass(StrategeyInterface strategy) { 
     this.strategy = strategy; 
    } 
    ....test methods using the strategy. 
} 

테스트 OG의 시작 THR의 구체적인 전략 구현을 주사로 사용되는 매개 변수화 된 생성자를해야합니다.

이제 TestNG를 실행하고 구체적인 구현 인스턴스를 주입하지 않았습니다. 나는 여러 가지 방법으로 상속, @DataProvider, @Factory 및 해당 방법을 시도했지만 행운을하지 않습니다.

Can't invoke public void MyClass.myTestMethod(): either make it static or add a no-args constructor to your class 

내가 테스트를 실행하기 위해 받는다는 확실한 플러그인을 사용 : 여기

는 TestNG의 보고서는 말씀입니다. 여기에 pom.xml 파일의 관련 부분은 다음과 같습니다

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <suiteXmlFiles> 
        <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile> 
       </suiteXmlFiles> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

는 어떻게 작성하고 테스트 클래스에 구체적인 구현을 주입하여, 테스트를 실행합니까?

미리 감사드립니다.

P. 나는 더 많은 코드를 제공 할 수 있었다. 나는 많은 변종을 시도했기 때문에 나는 여기에 게시하지 않았다. 그래서 나는 지금 혼란 스러우며 모든 것이 실패한다.

답변

4

몇 가지 옵션이 있습니다. Guice를 사용하는 경우 here is a very straightforward way to inject your implementation.

@Factory(dataProvider = "dp") 
public FactoryDataProviderSampleTest(StrategyInterface si) { 
} 

@DataProvider 
static public Object[][] dp() { 
    return new Object[][] { 
    new Object[] { new Strategy1Impl() }, 
    new Object[] { new Strategy2Impl() }, 
    }; 
} 
:

하지 않으면, 당신은 공장과 데이터 공급자의 혼합을 사용할 수 있습니다

관련 문제