2016-08-30 27 views
2

我正在與彈簧4.3.1.RELEASE工作,我已在有關測試以下:如何爲特定的@Test指定SpringClassRule/SpringMethodRule的行爲?

@RunWith(Parameterized.class) 
@ContextConfiguration(classes={RootApplicationContextConfig.class}) 
@Transactional 
public class PersonaJdbcRepositoryTest { 

    @ClassRule 
    public static final SpringClassRule SPRING_CLASS_RULE= new SpringClassRule(); 

    @Rule 
    public final SpringMethodRule springMethodRule = new SpringMethodRule(); 

    @Autowired 
    private PersonaRepository personaJdbcRepository; 

    private final Persona persona; 

    public PersonaJdbcRepositoryTest(Persona persona){ 
     this.persona = persona; 
    } 

    @Parameters 
    public static Collection<Persona[]> data() { 
     return Arrays.asList(new Persona[][] { 
      {PersonaFactory.crearPersona01()}, 
      {PersonaFactory.crearPersona02()}, 
      {PersonaFactory.crearPersona03()}, 
      {PersonaFactory.crearPersona04()}, 
      {PersonaFactory.crearPersonaMix()} 
     }); 
    } 

    @Test 
    @Sql(scripts={"classpath:/com/manuel/jordan/h2/h2-elimination-script.sql"}) 
    public void saveOneTest(){ 
     Persona personaSaveOne = personaJdbcRepository.saveOne(persona); 
     Persona personaFindOne = personaJdbcRepository.findOne(personaSaveOne.getId()); 
     assertEquals(personaFindOne, personaSaveOne); 
    } 


    @Test 
    public void findOneTest(){ 
     Persona personaFindOne = personaJdbcRepository.findOne(persona.getId()); 
     assertEquals(personaFindOne, persona); 
    } 

    @Test 
    public void findAllTest(){ 
     Collection<Persona> personas = PersonaFactory.crearPersonas(); 
     Collection<Persona> personasFindAll = personaJdbcRepository.findAll(); 
     assertEquals(personas.size(), personasFindAll.size()); 

    } 

} 

我可以data()根據確認每個@Test被執行,並通過N次(在本例5)。

我的要求是:我只需要執行一次findAllTest()方法。我的意思是,它被不必要地執行了4次。甚至更多時,它不使用persona對象。

因此可能通過SpringClassRule/SpringMethodRule指示@Test方法只工作一次?怎麼樣?

回答

3

是否可以通過SpringClassRule/SpringMethodRule表示@Test方法只運行一次?

不,這是不可能的。

您所遇到的行爲與Spring沒有任何關係。

它是Parameterized跑步者,它控制測試方法執行的次數。

如果您不想測試方法參數化,只需將其移動到不使用Parameterized跑步者的不同測試類。

+0

嗨,山姆,謝謝你的回覆。即使與Spring沒有關係,如果創建JIRA請求,是否會通過Spring添加該功能?或者沒有意義?讓我知道繼續與否。 –

+0

不,在Spring中請求這一點是沒有意義的,因爲Spring根本不可能對它做任何事情。 –

+0

再次感謝山姆,明白了。 –