2015-11-06 62 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。