java - 测试用例以确保数据无法加载

标签 java junit testcase

我有一个正在尝试完成的测试用例。它应该尝试找到位置 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/

相关文章:

javascript - 每次选中和取消选中复选框时如何在不单击表单提交按钮的情况下在数据库中插入值

java - hasStatusCode(int) 的类型是错误的 - Netbeans 8.0.2

java - 使用 EclEmma 的 Java 代码覆盖率不扫描预期的异常方法

java - 并非所有的 junit 测试都在 eclipse 中运行

java - 避免两个 for 循环并将它们合并为一个的更有效方法?

java - Spring bean加载顺序

java - Grails 中的多线程 - 将域对象传递到每个线程会导致某些字段随机为空

testing - 在 TestCafe 中等待 'WebComponentsReady' 事件的最佳方法是什么?

Django:在测试用例中获取cookie

python - 我怎样才能做这样一个典型的单元测试?