2015-11-06 53 views
2

目前,我有一个工厂类,看起来像这样:如何使用Spring自动装配在TestNG的工厂类

 @ContextConfiguration(classes = BeanConfig.class) 
     public class FactoryClass extends AbstractTestNGSpringContextTests { 

      @Autowired 
      public Bean bean; 
      @Factory(dataProvider="dataProvider") 
      public Object[] createTest(int a, int b) { 
       return new Object[]{new FactoryTestClass(a, b)}; 
      } 

      @DataProvider(name="dataProvider",parallel=true) 
      public Object[][] passInts(){ 
       bean.method(); 
       return new Object[][]{{2,2},{2,3},{2,4},{2,4}}; 
      } 

      @BeforeSuite 
      public void beforeSuite(){ 
       System.out.println("before suite"); 
      } 
     } 

我的目标是使用Spring的自动装配功能,这样我就可以使用一个bean来帮助生成一些测试数据提供者的数据。然而,在我的尝试中,春天的环境从未初始化。有人知道我可能做错了什么,或者有另一种方法可以接受吗?

谢谢你, 杰森

+0

BeanConfig的外观如何? – mat3e

+0

'@Configuration @ComponentScan(basePackages = “com.jason”) 公共类BeanConfig { \t @Autowired \t私人环境Env; } ' – jbwt

回答

0

我有一些类似的问题:我的测试文件夹位于目录主要外面,所以,我将其标记为测试源资源(在的IntelliJ IDE)后开始工作。希望能帮助到你。

0

我建议找到@DataProvider是与@Test方法相同的类。我从来没有遇到这种方法的问题。

在一个测试类中具有各种@Test方法和各种dataProvider是有效的用法。 @Test方法将指定在@Test注释参数中使用哪个dataProvider。

实施例:

 @DataProvider(name="dataProvider",parallel=true) 
     public Object[][] passInts(){ 
      bean.method(); 
      return new Object[][]{{2,2},{2,3},{2,4},{2,4}}; 
     } 

     @Test(dataProvier="dataProvider") 
     public test(int param1, int param2){ 
      //... 
     } 
+0

谢谢luboskrnac。我认为这是可行的,但是如果我这样做,那么每个测试方法都会触发数据提供者执行。如果我有几种测试方法,这肯定会变得很笨重吗? – jbwt

+0

不,TestNg不同。 '@ Test'方法需要在注解参数中指定'dataProvider'。我通常使用各种提供商为每个测试类别提供各种测试方法。如果测试类变得太大,测试中的类可能会处理太多的问题。 – luboskrnac

+0

谢谢luboskrnac。如果我有三种测试方法都被注释为使用相同的数据提供者,那么数据提供者方法将被执行三次。我想我的问题是如果数据提供者方法运行起来很昂贵,最终导致测试速度变慢。如果我有一个工厂类和一个数据提供者,那么这个方法只运行一次,这就是为什么我尝试这种方法的问题! – jbwt

0

尝试添加loader=AnnotationConfigContextLoader.class到ContextConfiguration。

相关问题