如何为特定的@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。