java - 模拟使用外部类的方法,mockito

标签 java unit-testing mockito

我是 mockito 的新手,只是想了解它是如何工作的。

我有一个要测试的方法。该方法实例化多个类以使用其方法。

例如

methodToTest{
 class1 c1 = new class1();
 class2 c2 = new class2();
 class3 c4 = new class3();

c1.method1;
c2.method2;
c3.method3;

more logic 

...

return result
}

我知道为了测试这个方法我需要模拟类。这是否意味着我需要解耦它并将每个类作为参数传递给方法? 我想避免使用仅在模拟时真正需要的大量参数列表的方法。

也许我错过了什么。

感谢您的见解。

最佳答案

我的标准解决方案是添加一个实例化类的方法:

public ClassToTest {
    methodToTest{
        class1 c1 = newClass1();
        ...
    }

    class1 newClass1() {
        return new Class1();
    }
}

新方法是 protected 或 package private,我只是在我的单元测试中覆盖它以注入(inject)模拟:

@Test
public void testFoo() {
    ClassToTest inst = new ClassToTest() {
        class1 newClass1() {
            return new Class1(); // <--- you can mock here
        }            
    };
}

关于java - 模拟使用外部类的方法,mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884555/

相关文章:

c# - 单元测试未显示测试结果

c# - XUnit 在测试失败时输出更多信息

java - 测试第 3 方类的工厂

java - 计算工作时间和现金

java - 改造2.7.1 连接失败

unit-testing - 在多个文件上使用 Power Mock 运行 Robolectric 测试时出现 ClassCastException 异常

java - 是否有一些方法在没有在模拟上调用的方法的情况下无法被 Mockito 模拟?

android - 使用 Mockito 模拟改造服务导致 ExceptionInInitializerError

java - Soap 客户端抛出意外的元素异常

java - 未知错误 - bundle 字符串数组