返回类型为空时的单元测试保存方法

时间:2019-06-12 17:45:36

标签: java junit5 spring-boot-test

当返回类型为空时,是否有任何方法可以在DAO层中为保存方法编写单元测试?我在春季启动项目中使用的是Junit Log4j。

我尝试了许多方法来断言它们。但是因为它们没有返回任何值,所以我无法断言它们。

4 个答案:

答案 0 :(得分:6)

如果该方法为void,则它具有side-effects,否则为no-op

因此,您调用该方法,然后检查是否发生了所需的副作用。

例如setFoo(7)应该意味着getFoo()返回7,尽管单元测试简单的getter / setter方法是浪费时间。

通常使用模拟对象来检测副作用,但这完全取决于预期的副作用。参见:What is the purpose of mock objects?

答案 1 :(得分:2)

根据您的评论,您需要为保存方法编写一个单元测试。试试这个示例代码,

@Autowired
private EmployeeDAO employeeDAO;

@Test
public void whenValidEmployee_thenShouldSave()
{
    EmployeeEntity employee = new EmployeeEntity("1", "Department Name", "Role"); //id, department name and role are passing as constructor parameters
    employeeDAO.save(employee);

    List<EmployeeEntity> employees = employeeDAO.findAll();

    //Assert
    Assert.assertEquals(employee.getId(), employees.get(0).getId());
}

答案 2 :(得分:2)

编写可测试的代码对于当今的开发人员而言非常重要。您应该了解,具有void的方法仅出于一个原因是不好的,无论如何都无法测试。我建议您采取以下行动

  1. 使用相关的返回类型改进代码。
  2. 值得使用DbUnit,而不是仅应用Junit进行测试 您的DAO层。

@Teguwih

答案 3 :(得分:1)

有几种方法可以对返回void的方法进行单元测试。

  1. 更改方法,以便即使您不使用该值也返回一个值。这不是最好的方法,但是为了完整起见,我在这里注意到了。

  2. 该方法可能会以某种方式更改对象的状态。保存了文件,将值存储在某个位置,参数已更改,等等。因此,请检查应更改的值。您可以读取已保存的文件,更改的变量,测试数据库中的数据等。

  3. 模拟对象可用于确定是否调用了方法以及行为。 Java有许多模拟对象框架,包括Easy Mock,JMockit和Mockito。如何使用模拟框架超出了此答案的范围,但是我确实提供了指向各个站点的链接供您参考。

  4. 如果对该方法提供了错误的输入,则可能会引发异常。最好测试一下方法的错误处理。