我如何使用Mockito模拟另一类中的类方法



我正在尝试使用Junit和Mockito嘲笑端到端方法(添加杂物方法)。很明显,在该方法中,我使用其他方法。我的疑问是:

  • 要模拟端到端方法,我也需要模拟其他方法,对吧?
  • 如何模拟添加方法中的方法?

我想要的简单示例是:

方法A

public int summing(int sum){
 int A = 5;
 int B = 23;
 sum = SumOfIntegers(A,B);
 return sum;
}

方法B

private int SumOfIntegers(int number1, int number2){
try{
    result = number1 + number2;
 }catch (Exception e) {
        e.printStackTrace();
 }
return result;
}

,我该如何模拟班级的方法A,因为它调用了私人方法?

Unitests验证单元的公共可观察行为,即返回值和与其依赖关系的通信/em>


在您的情况下,问题是ServerProxy有一个隐藏的依赖性。您不应该以该方法实例化,而不是在该类别中进行实例化...

如果您严格遵循关注/单一责任模式的分离 依赖性的实例化是其本身的责任,并且对象不应使用依赖关系来完成。

总而言之,您应该通过依赖性注入进行注入 ServerProxy对象,最好是作为构造函数参数,很可能使用 di框架。在这种情况下,用一个模拟替换ServerProxy是很重要的

您需要模拟addSomething()属于的类。

假设您有一个使用该方法的类。

public class ClassB {
  public String methodB(String jsonSomething) {
     ...
     String result = addSomething("{}");
    ...
  }  
}
public class ClassA {
  public String addSomething(String jsonSomething) {
     ...
  }  
}

在ClassB的测试类中,您将模拟Classa对象,并为addSomething方法指定行为。您无需为addSomething中的内容指定任何模拟行为。

@RunWith(MockitoJRunner.class)
public class ClassBTest {
  @Mock
  private ClassA classA;
  @Test
  testMethodB() {
    given(classA.addSomething(anyString())).willReturn("{}"); // Here you are specifying the mocked behavior for addSomething
    ...
  }
}

如果您打算模拟其范围是所测试方法本地范围的对象的方法,那么这可能是可以使用诸如PowerMock之类的东西,但实际上这通常是指您的代码'写得很好,很容易测试。

我将重新计算您的代码,以确保使用依赖项注入将要模拟方法的任何对象都包括在类级别上。然后,用Mockito对此进行嘲笑非常简单,通过在测试中用@mock注释标记这些对象,并用@InjectMocks标记您正在测试的类。然后,这将确保将对象的模拟注入测试中的测试中的类,而不是对象的真实实例,然后您可以将所有喜欢的方法存根。

您不模拟方法,嘲笑整个类,并使它们按照其方法的方式响应。然后,如果您在类内部使用方法A,并且此方法A使用方法B,则仅模拟方法A。不执行类中的代码,因此您无需模拟整个链条。这是嘲笑的重点。那是你问的吗?

因此,您永远不会模拟在主要方法中使用的方法。

相关内容

  • 没有找到相关文章

最新更新