spring - 如何为特定的@Test指定SpringClassRule/SpringMethodRule的行为?

标签 spring junit junit4 spring-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 无关。

它是参数化运行器,控制测试方法的执行次数。

如果您不希望对测试方法进行参数化,只需将其移至不使用参数化运行器的其他测试类即可。

关于spring - 如何为特定的@Test指定SpringClassRule/SpringMethodRule的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39234490/

相关文章:

java - URL中的Webflux Webclient转义斜杠

Java 程序具有 Linux 方法 - 我可以在其上运行 Junit 测试用例吗?

java - 使用 Java Play Framework 2.3.x 在 Controller 中上传单元测试文件

java - @RunWith(MockitoJUnitRunner.class) 和 @RunWith(SpringJUnit4ClassRunner.class) 有什么区别?什么时候合适使用它?

Java Junit4 支持扩展基类

java - Cometd,Spring 安全 : Currently authenticated user not available inside a Listener

spring - 使用 Spring RequestMapping 路径参数编码的 Precent(%25) 给出 HTTP 400

java - 使用 log4j 将 spring 消息从 sysout 获取到文件

android - 观察由另一个线程修改的对象时 Android JUnit 测试中的计时问题

eclipse - 使用 Jenkins/Hudson 的集成管理器 Git 工作流