2016-12-30 328 views
0

我看到类似的问题,但没有正确回答,因为我正在寻找。Java中的单元测试void方法Junit/Mockito

我有void方法,它根据其他一些DB值对Model对象进行一些更改,然后再次将其保存回数据库。

伪代码:

User{ 
List<Mark> marks; 
String fullName; 
int grade; 
date dob; 
} 

的逻辑是通过调用另一个服务应用一些公式来更新用户级。

这是我用来测试它:

我可以给User物体标记作为输入。我将通过提供公式来确定每个商标的等级来嘲笑服务。我想测试最后的User对象与我在保存前预期的内容相匹配。

我知道我可以将其移动到单独的方法并返回对象,以便可以进行单元测试。我在这里看到的是如果有任何方法来测试void方法内部的逻辑来验证更新的对象。我在我们的项目中有几个类似的方法。

我知道有Mockito.verify或我可以打电话像doNothing等。这只是调用方法,看看里面发生了什么。但是我没有通过调用这些方法来获得数据验证。

如果有人能为此提出解决方案,那可能会很好。

我举了一个例子,代码可用于我。尽管这是一个通用的问题。我的问题是在这里如何测试一个无效的方法?我的问题不是如何嘲讽一种无效的方法。由于void方法不会返回任何内容,但它会执行一些逻辑并最终更新数据库。我想测试执行的逻辑是否适用于不同的场景。情况不能改变原始方法 - 为这些方法编写单元测试。有什么建议么?

+2

“_我知道我可以移动它来分离方法并返回对象,以便可以进行单元测试。”< - 这样做。 – jaco0646

+0

感谢@ jaco0646为您的快速响应。但是你的意思是没有办法在java单元测试中验证void方法中的数据吗? – Shamseer

+3

我不是说你不可以。我说你不会。不要在复杂的测试中绕过设计问题。修复设计。 – jaco0646

回答

1

你的方法不返回任何东西的事实是无关紧要的。您可以像其他方法一样测试void方法:设置您的输入,调用方法,执行所需的断言。

如果我理解正确,您遇到的问题是该方法不会返回任何内容,但是如果您传递的是初始User对象,则您已经有对该对象的引用,因此您仍然可以执行所需的任何断言void方法完成后。

+0

Tnx,现在解决了我的问题。我将需要详细了解如何制作更好的单元可测试代码。您是否有很好的参考资料可以看到设计应用程序的更多亮点,以使更多的单元可测试... – Shamseer