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

时间:2018-02-02 22:49:54

标签: 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());
}

非常感谢任何建议!

1 个答案:

答案 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注释并不存在。