【问题标题】:How to mock a class in another class junit mockito如何在另一个类junit mockito中模拟一个类
【发布时间】:2016-05-09 11:47:13
【问题描述】:

以下是定义为的 2 个类:

Class1{
   public method1
    {
        class2.getInstance().method2();
    }
}

Class2{
   public static getInstance() { .... }

   public method2() { .... }

   public Class3 obj = new Class3();
}

我需要为class1的method1编写junit测试。 但我需要知道如何模拟 class2 的 getInstance() 和 method2()。

另外,请告诉我如何模拟 Class3 的对象。

【问题讨论】:

标签: java unit-testing junit mockito


【解决方案1】:

如果你发现很难为你的类编写一个好的测试,你应该重新设计你的类以获得更好的可测试性,这就是为什么 TDD 也被称为 Test Driven Design .为一个简单的类编写测试永远不会很困难。

然而,

【讨论】:

    【解决方案2】:

    对于这个任务(例如模拟new),您需要另一个框架。例如PowerMock

    【讨论】:

    • 如果可能的话,你能帮我举个例子吗?
    • 看看杰拉德的回答 ;)
    【解决方案3】:

    所以,伙计们,已经回答你的人是对的。

    如果您发现很难为您的课程编写一个好的测试,您应该重新设计您的课程以获得更好的可测试性,这就是 TDD 也称为测试驱动设计的原因。为一个简单的类编写测试应该不会很困难。

    然而,

    这里描述了如何模拟静态方法 PowerMockito 模拟单个静态方法并返回对象(感谢 Jorge) 此处已经描述了如何部分模拟一个类:How to mock a call of an inner method from a Junit

    我可以添加以下内容:

    如果你真的有充分的理由去做你想做的事,我建议你进一步:

    您可以使用 powermock 库的Whitebox.setInternalState() 方法来模拟 Class3 的对象。

    Whitebox.setInternalState(class2, "obj", class3Mock);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      相关资源
      最近更新 更多