如何将参数注入TestNG类的构造函数?

我已经实现了一个带有策略模式的程序。 所以我有一个在某些地方使用的接口,可以替换具体的实现。

现在我想测试这个程序。 我想以类似的方式做到这一点。 编写一次测试,测试接口。 应在测试开始时注入具体的接口实现,以便我可以轻松替换它。

我的testclass看起来类似于这个:

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

参数化的构造函数必须用于在测试开始时注入具体的策略实现。

现在我没有让TestNG运行它并注入具体的实现实例。 我尝试了几种inheritance方式, @DataProvider@DataProvider和相应的方法,但没有运气。

以下是testNG报告所说的内容:

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

我使用maven surefire插件来运行测试。 这是pom.xml的相关部分:

     org.apache.maven.plugins maven-surefire-plugin   src/test/resources/testng.xml      

如何编写和运行测试,并在测试类中注入具体实现?

提前致谢。

PS我可以提供更多我试过的代码。 我没有在这里发布它,但是,因为我尝试了很多变种,所以我现在有点困惑,所有这些都失败了。

你有几个选择。 如果您使用Guice, 这是一种非常直接的方式来注入您的实现 。

如果没有,您可以使用混合的工厂和数据提供者:

 @Factory(dataProvider = "dp") public FactoryDataProviderSampleTest(StrategyInterface si) { } @DataProvider static public Object[][] dp() { return new Object[][] { new Object[] { new Strategy1Impl() }, new Object[] { new Strategy2Impl() }, }; }