我在测试 CompanyService 的 findCompany() 方法的测试类中创建了以下四个测试。
@Test
public void findCompany_CompanyIdIsZero() {
exception.expect(IllegalArgumentException.class);
companyService.findCompany(0);
}
@Test
public void findCompany_CompanyIdIsNegative() {
exception.expect(IllegalArgumentException.class);
companyService.findCompany(-100);
}
@Test
public void findCompany_CompanyIdDoesntExistInDatabase() {
Company storedCompany = companyService.findCompany(100000);
assertNull(storedCompany1);
}
@Test
public void findCompany_CompanyIdExistsInDatabase() {
Company company = new Company("FAL", "Falahaar");
companyService.addCompany(company);
Company storedCompany1 = companyService.findCompany(company.getId());
assertNotNull(storedCompany1);
}
我的理解是,前三个是单元测试。他们测试 findCompany() 方法的行为,检查该方法将如何响应不同的输入。第四个测试虽然放在同一个班级,但实际上对我来说似乎是一个集成测试。它要求首先将公司添加到数据库中,以便以后可以找到它。这引入了外部依赖项 - addCompany() 和数据库。
我走对了吗?如果是,那么我应该如何对现有对象进行单元测试?只是模拟服务来“找到”一个?我认为这会扼杀测试的意图。
我很感激这里的任何指导。