Java 斯波克-模拟私人场地

Java 斯波克-模拟私人场地,java,groovy,spock,Java,Groovy,Spock,我必须模仿私人领域: 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() } } 我必须为这种类中的

我必须模仿私人领域:

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。这里有可能吗?

请阅读我的评论,或者在我回答的许多关于依赖注入(DI)的此类问题中。在紧密耦合的应用程序设计中缺乏这种能力是阻止您有效地进行测试和重构的原因

所以去重构吧确保你的类有一个构造函数或setter来注入依赖项(这里是你想要模拟的
B
的实例)


如果您的成员不是final,您可以使用Groovy ism,只需在构造函数中使用已知的私有成员名称,如
aa=new a(b:Mock(b))
,根据我的回答,但这是一个丑陋的替代方案,无法通过自动化测试驱动良好的应用程序设计并解耦类。如果某个类很难测试,在很多情况下(这里也是),这并不意味着你的测试技能或工具需要提高,但你的应用程序设计有缺陷。

通常,如果类成员是私人成员,他们不需要接受测试,除非你有某种遗留软件,否则你不能change@injecteer单元测试我不想测试其他类,所以有可能测试它吗?展示一些你想测试的例子make@injecteer我添加了我想测试的函数抱歉,但它看起来不像是一个测试。也许是一个调试平台,但绝对不是一个测试。看起来你正在尝试测试模拟,这是你知道的。。。