我正在使用 Spring 4.3.1.RELEASE
并且我有以下关于测试的信息:
@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());
}
}
我可以确认每个@Test
都已执行,并根据data()
传递了N次(在本例中为5次)。
我的要求是:我只需要执行一次 findAllTest()
方法。我的意思是,它不必要地执行了 4 次。当它不使用 persona
对象时更是如此。
因此有可能通过SpringClassRule/SpringMethodRule
表明@Test
方法只能工作一次吗?怎么办?
最佳答案
Is it possible to indicate through
SpringClassRule/SpringMethodRule
that a@Test
method just runs once?
没有。这是不可能的。
您遇到的行为与 Spring 无关。
它是参数化
运行器,控制测试方法的执行次数。
如果您不希望对测试方法进行参数化,只需将其移至不使用参数化
运行器的其他测试类即可。
关于spring - 如何为特定的@Test指定SpringClassRule/SpringMethodRule的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39234490/