【问题标题】:Junit and Mockito: How to test whether a method calls a method?Junit和Mockito:如何测试一个方法是否调用了一个方法?
【发布时间】:2013-08-01 13:26:34
【问题描述】:

我正试图围绕 mockito 进行思考,并且想知道如何测试一个方法是否调用了一个方法!

所以这是一个类,里面有它的方法:

public class RegisterController {

    public void regHandle(UserDataObject user1){

        ValidateRegisterInputController validate = new ValidateRegisterInputController();
        validate.validateInputHandle(user1); }

我将如何测试 regHandle(UserDataObject) 调用 validate.validateInputHandle(user1); ?

我确信这是一个超级简单的测试,但我真的不知道如何测试它。

【问题讨论】:

标签: java testing junit mockito


【解决方案1】:

有多种方法可以为实例化其他类的方法编写测试。我在 Mockito wiki 上的文章中写了其中两个,地址为 http://code.google.com/p/mockito/wiki/MockingObjectCreation

我描述的两种技术都涉及重构代码以使其更易于测试。

【讨论】:

    【解决方案2】:

    您将创建一个 ValidateRegisterInputController 的模拟,然后将其传递给构造,然后您将执行以下操作: Mockito.verify(mock).validateInputHandle(user1).

    我强烈建议您不要进行此类测试。相反,问问自己如何编写一个单元测试来检查您想要验证的内容是否有效。

    例如,检查调用 regHandle 后 user1.isValid() 是否等于 true。

    【讨论】:

    • 这只有在RegisterController 仅在ValidateRegisterInputController 的单个实例上操作时才有效。每次调用该方法时,代码都会创建一个新实例。如果代码可以重用相同的实例,则此答案将有效。我也不知道验证isValid 比验证对模拟的调用更好。如果即使已经设置了该方法也应该调用它怎么办?如何验证通话。您在回答中对代码和要求做出了很多假设。
    • 我只是说,从个人经验来看,如果你重构它,代码会更好地阅读和测试,这样你就不会依赖于 mocks
    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    相关资源
    最近更新 更多