我有一个正在尝试完成的测试用例。它应该尝试找到位置 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());
}
非常感谢任何建议!
最佳答案
I have a test case I'm trying to finish. It should try to find location ABC, but that doesn't actually exist in the DB
为了确保测试执行期间数据存在或不存在,您不能依赖应用数据库或共享数据库。
自动化测试必须是可重复的。否则,这些今天是可靠的,但明天就没用了,而且容易出错。
因此,我鼓励您在执行测试之前清理/填充测试数据库(或架构)。
此外,正如其他人评论的那样,您的测试看起来不像“未找到”场景。您断言检索到的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 注释不存在。
关于java - 测试用例以确保数据无法加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48591996/