@DataJpaTest对数据库进行单元测试和集成测试之间的区别

时间:2020-06-12 10:26:30

标签: unit-testing integration-testing

我有点困惑。

在这里说这是单元测试: https://www.baeldung.com/spring-jpa-test-in-memory-database

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
  classes = { StudentJpaConfig.class }, 
  loader = AnnotationConfigContextLoader.class)
@Transactional
public class InMemoryDBTest {

@Resource
private StudentRepository studentRepository;

@Test
public void givenStudent_whenSave_thenGetOk() {
    Student student = new Student(1, "john");
    studentRepository.save(student);

    Student student2 = studentRepository.findOne(1);
    assertEquals("john", student2.getName());
}
}

在这里它说这是一个集成测试: https://www.baeldung.com/spring-boot-testing

@DataJpaTest
public class EmployeeRepositoryIntegrationTest {

@Autowired
private TestEntityManager entityManager;

@Autowired
private EmployeeRepository employeeRepository;

@Test
public void whenFindByName_thenReturnEmployee() {
    // given
    Employee alex = new Employee("alex");
    entityManager.persist(alex);
    entityManager.flush();

    // when
    Employee found = employeeRepository.findByName(alex.getName());

    // then
    assertThat(found.getName())
      .isEqualTo(alex.getName());
    }
}

在两种情况下,它都会保存。但是对于一个人,他们说这是一个单元测试,对于其他人,他们说这是一个集成测试。我看到的唯一区别是,在第一种情况下,它是通过配置创建数据库的。在第二种情况下,spring完全为我们完成了任务。

我所知道的集成测试包含更多不同的部分,在第二种情况下,它不包含任何内容。

0 个答案:

没有答案