如何在构造函数中模拟由构造函数创建的字段

How to mock a field which is created by constructor within a constructor

提问人:Dreamer 提问时间:11/12/2023 最后编辑:Dreamer 更新时间:11/12/2023 访问量:64

问:

考虑到以下设计,有一个实例字段,该字段在 Parent 的构造函数中由其自己的构造函数启动。然后要对 Parent 类中的方法进行单元测试,我需要模拟子对象,但是我面临着通过 Mockito 实现它的挑战。ParentChildthanksGivingVisit()

我浏览了一些关于使用的在线资源,我想我可以用它模拟对象,但仍然不确定如何将其注入课堂MockedConstructionchildParent

顺便说一句,我正在使用 Mockito 4.5,无法用 PowerMock 或其他框架替换它。

public class Parent{

    private Child child;

    public Parent(Legacy legacy, Config config){
        child = new Child(legacy, config.getBirthCertificate());
    }

    public Result thanksGivingVisit(){
        
        // let's mock the result to avoid DB transaction in the `withdraw` method
        // however, how to mock child object?
        Int amount = child.withDrawFromBackAccount();
        
        // use amount to calculate Result object...
    }
}
Java 单元测试 mockito

评论

1赞 tgdavies 11/12/2023
创建一个类,该类具有传递给构造函数的单例实例。创建一个模拟,用于创建模拟对象。ChildFactoryParentChildFactoryChild
0赞 Dreamer 11/12/2023
@tgdavies谢谢!这是否意味着父子实现需要更改以适应单元测试框架?
0赞 tgdavies 11/12/2023
是的,为了使代码易于使用模拟进行测试,您希望避免直接调用。new
1赞 Gene 11/12/2023
您可能想阅读依赖注入的主题。
0赞 Dreamer 11/12/2023
@Gene DI 像 Bean 一样通过 Spring Framework ?

答: 暂无答案