我必须模拟私有(private)字段:
public class A{
private final B b;
public A(){
this.b = new B(new OtherService)
}
public test(){
int i = b.test()
if(i == 0)
b.test1()
else
b.test2()
}
}
我必须为此类中的方法创建单元测试,并且我必须模拟 B 类,这在这里可能吗?
最佳答案
请阅读我的评论here和 here或者在许多其他此类问题中,我回答了有关依赖注入(inject)(DI)的问题。紧密耦合的应用程序设计中缺乏这一点会阻止您有效地进行测试和重构。
所以去重构!确保您的类有一个构造函数或setter来注入(inject)依赖项(这里:您想要模拟的B
实例)。
如果你的成员不是最终的,你可以使用 Groovy-ism,只需在构造函数中使用已知的私有(private)成员名称,如 A a = new A(b: Mock(B))
根据我的回答here ,但对于通过自动化测试和解耦类来驱动良好的应用程序设计来说,这是一个丑陋的替代方案。如果任何类难以测试,在很多情况下(也在这里)并不意味着您的测试技能或工具需要变得更好,而是您的应用程序设计存在缺陷。
关于java - Spock - 模拟私有(private)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64590395/