如何在测试之间重置

我有一个测试类

@RunWith(SpringRunner.class)
@DataJpaTest

我有两个测试。在每次测试中,我都执行相同的操作,保留对象。只有查找调用是不同的。

如果我同时运行这两个测试,它们会失败,但是如果我一个接一个地运行测试,它们就会成功。

每个测试之间没有重置。如何做到这一点?在每个测试中,只有对存储库的调用是不同的。

@Test
public void findTopByCommerceCommerceIdOrderByEntryTimeDesc() {

    Long commerceId = 1L;

    Commerce commerce = new Commerce();
    commerce.setName("test");
    this.entityManager.persist(commerce);

    Member member = new Member();
    member.setCommerce(commerce);
    member.setMan(true);
    member.setName("bob binette");

    this.entityManager.persist(member);

    Visit visit1 = new Visit();
    visit1.setCommerce(commerce);

    visit1.setMember(member);
    visit1.setEntryTime(LocalDateTime.of(LocalDate.now(), LocalTime.now()));

    Visit visit2 = new Visit();
    visit2.setCommerce(commerce);

    visit2.setMember(member);
    visit2.setEntryTime(LocalDateTime.of(LocalDate.now().minusDays(2), LocalTime.now()));

    this.entityManager.persist(visit1);
    this.entityManager.persist(visit2);

    Visit visit = visitRepository.findTopByCommerceCommerceIdOrderByEntryTimeDesc(commerceId);

    assertEquals(visit.getVisitId(), Long.valueOf("1"));

}

编辑

我把所有的代码: http://pastebin.com/M9w9hEYQ


答案 1

添加@DirtiesContext注释,但将其与AFTER_EACH_TEST_METHOD类Mode一起提供

@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

答案 2

在您的情况下,对于每个测试,您都保留相同的数据。因此,您应该在所有测试之前保留数据,或者在每次测试之前保留数据并在测试之后进行清理。

1. 在所有测试前坚持

@BeforeClass
public static void init(){
  //persist your data
}

@AfterClass
public static void clear(){
  //remove your data
}

@Test
public void findTopByCommerceCommerceIdOrderByEntryTimeDesc() {
    Visit visit = visitRepository.findTopByCommerceCommerceIdOrderByEntryTimeDesc(commerceId);

    assertEquals(visit.getVisitId(), Long.valueOf("1"));
}

在这种情况下,@AfterClass是可选的

2. 每次测试前坚持,每次测试后清洁

    @Before
    public void init(){
      //persist your data
    }

    @After
    public void clear(){
      //remove your data
    }

    @Test
    public void findTopByCommerceCommerceIdOrderByEntryTimeDesc() {
        Visit visit = visitRepository.findTopByCommerceCommerceIdOrderByEntryTimeDesc(commerceId);

        assertEquals(visit.getVisitId(), Long.valueOf("1"));
    }

请记住,使用@BeforeClass和@AfterClass的方法必须是静态的。


推荐