如何为特定的@Test 指定SpringClassRule/SpringMethodRule 的行为?
How specify the behaviour of SpringClassRule/SpringMethodRule for a specific @Test?
我正在与 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无关。
它是 Parameterized
runner 控制一个测试方法执行多少次。
如果您不希望测试方法被参数化,只需将其移动到不使用 Parameterized
运行程序的不同测试 class。
我正在与 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无关。
它是 Parameterized
runner 控制一个测试方法执行多少次。
如果您不希望测试方法被参数化,只需将其移动到不使用 Parameterized
运行程序的不同测试 class。