【问题标题】:How specify the behaviour of SpringClassRule/SpringMethodRule for a specific @Test?如何为特定的@Test 指定 SpringClassRule/SpringMethodRule 的行为?
【发布时间】:2016-08-30 18:17:45
【问题描述】:

我正在使用 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 方法只能工作一次?怎么样?

【问题讨论】:

    标签: spring junit junit4 spring-test


    【解决方案1】:

    是否可以通过SpringClassRule/SpringMethodRule 表明@Test 方法只运行一次?

    没有。这是不可能的。

    您遇到的行为与 Spring 无关。

    Parameterized runner 控制了测试方法的执行次数。

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

    【讨论】:

    • 嗨,山姆,感谢您的回复。即使与 Spring 无关,如果创建 JIRA 请求,是否会通过 Spring 添加该功能?还是没有意义?让我知道是否继续。
    • 不,在 Spring 中请求这个是没有意义的,因为 Spring 实际上不可能对此做任何事情。
    • 应该在JUnit 5 中创建一个issue 来请求该功能吗?类似于@Test(parameterized=false),因此当执行Test 类时,Test 方法只执行一次(它不应该受@Parameters 影响)。有感觉吗?
    • 无需创建新问题。我们已经在 J​​Unit 5 中有一个专门的参数化测试问题:github.com/junit-team/junit5/issues/14
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 2011-01-24
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多