我有一个测试用例我试图完成。它应该尝试找到位置ABC,但实际上并不存在于数据库中。从本质上讲,它不应该加载我试图找到的数据。我尝试了很多东西,还没有想到它。这是我的代码:
@Test
public void testFindByInvalidLocABC() {
System.out.println("findByInvalidLocABC");
Storage result = StorageFacadeTest.facade.findByLoc("ABC");
assertNotNull(result);
assertEquals("NOK-0000001402", result.getId());
assertEquals("ABC", result.getLoc());
}
非常感谢任何建议!
答案 0 :(得分:1)
我有一个测试用例我试图完成。它应该试图找到 位置ABC,但实际上并不存在于DB
中
为了确保在测试执行期间存在或不存在数据,您不能依赖于应用程序或共享数据库。
自动化测试必须可重复。否则,今天这些将是可靠的,但明天无用且容易出错
因此,我建议您在执行测试之前清理/填充测试数据库(或模式)。
此外,正如其他人评论的那样,您的测试看起来并不像“未找到的”#34;场景。您断言检索到的Storage
内容。这没有道理。
它应该看起来像:
@Test
public void findByLoc_with_invalidLoc_returns_null() {
Storage result = StorageFacadeTest.facade.findByLoc("ABC");
assertNull(result);
}
您的单元测试的一些改进:
1)在测试方法中返回Optional
而不是null
可能更好,但您不能在实际实施中使用它。所以我在我的例子中遵循它。
2)测试代码中确实没有建议System.out
。
3)也不建议测试方法中的test
前缀。这是一种遗留方式,因为Java注释并不存在。