有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中模拟类变量值的单元测试问题

我有一个类,它有一个初始化为

public class MyClass{

    private BusinessObject businessObject = BusinessObjectGenerator.getBusinessObject();

    public MyClass(){

    }

    public Object myMethodToTest(){
    return businessObject.getObject();
    }
}

现在,我正在尝试单元测试myMethodToTest,我想发送一个模拟对象来代替businessObject。我使用mockito进行模拟,使用spy(new MyClass())进行部分模拟,但在模拟get businessObject的调用时遇到困难。 1.是否可以模拟对businessObject的调用?如果是,怎么做? 2.在编写单元测试时,如何重构此代码以提供帮助。任何指向这一点的资源都将大有裨益

谢谢


共 (1) 个答案

  1. # 1 楼答案

    要正确重构此代码,您需要:

    private BusinessObject businessObject;
    
    public void setBusinessObject(BusinessObject instance) {
        businessObject = instance;
    }
    
    private BusinessObject getBusinessObject() {
        if (businessObject == null) {
            // represents existing implementation in original code sample
            businessObject = BusinessObjectGenerator.getBusinessObject();
        }
        return businessObject;
    }
    
    /* rest of your code */
    

    现在,您可以在测试站点将模拟注入到类中

    我建议使用依赖注入和Guice这样的框架来实现这一点。这是值得你花时间的