如何监视属于无法从外部访问的对象的方法?

时间:2016-06-23 19:03:04

标签: java unit-testing mocking mockito

我对Mockito很新,我有一个无法找到解决方案的情况。我想用Mockito测试一种方法。问题是在这个方法中,有一个对象被创建,而该对象有一个我想要模拟的函数

例如,这里有一个小示例代码,说明了我的问题:

public class ClassA {
    public functionDoingDBStuff() {
        //...........
    }
}

public class ClassB {
    final ClassA classAObj = null;

    public functionXYZ() {
        classAObj = new ClassA();

        classAObj.functionDoingDBStuff();
    }
}


@Test
MyTestFunction() {
    ClassB classBObj = new ClassB();

    // How can I access and mock functionDoingDBStuff() here?
}

所以在MyTestFunction()中,我想测试functionXYZ(),但是模拟在functionDoingDBStuff()内调用的函数functionXYZ()。通过模拟,我的意思是返回我想要测试的特定结果。但是,函数functionDoingDBStuff()属于functionXYZ()内创建的对象,因此我不知道如何告诉Mockito从MyTestFunction()内访问它。我希望你能理解我的意思。

1 个答案:

答案 0 :(得分:0)

如果一段代码不能轻易测试,表明代码结构存在问题,请告诉我。无论如何,为什么new ClassA()需要在functionXYZ内完成?无法在对象级别实例化(更好地注入)?如果是这样,你可以注入一个ClassA的模拟实例。

如果仍然需要在方法中实例化,可能不是在执行new ClassA(),而是应该包含在工厂方法中。然后你可以模拟工厂返回模拟ClassA