Java 外部类测试需要私有内部类吗?

Java 外部类测试需要私有内部类吗?,java,testing,junit,inner-classes,Java,Testing,Junit,Inner Classes,我有一个外类,外类,和一个内类,内类。为了在Outer中测试公共方法outerMethod(),我需要创建一个Inner的实例,该实例将存储在名为inners的列表中。内部类是另一个类Other的修改版本 概述: class Other{ public Other(){ //doesnt matter actual implementation } } class Outer{ private List<Inner> inners = new

我有一个外类,外类,和一个内类,内类。为了在Outer中测试公共方法outerMethod(),我需要创建一个Inner的实例,该实例将存储在名为inners的列表中。内部类是另一个类Other的修改版本

概述:

class Other{
    public Other(){
       //doesnt matter actual implementation
    }
}

class Outer{
    private List<Inner> inners = new ArrayList<Inner>();

    public Outer(){}

    public void outerMethod(){}

    private class Inner{
        public Inner(Other other){}
    }
}
还有其他的解决办法吗?现在,我可以公开内部,但Outer是唯一真正使用内部的类


考虑到

专门为测试目的更改代码可能不是一个好主意

你有两个选择——要么按照@bot在评论中的建议重新设计你的类,要么应用变通方法


您可以更改字段/内部类访问修饰符,并在测试中使用它们。请看一看,了解实现细节。

我仍然会在没有意义的地方更改代码。我的意思是,除了外部,没有人需要内部。那么,它们不是有点相同吗:更改测试代码?我不同意。提高代码的可测试性会自动改善代码的设计。可测试代码具有设计良好的代码的大部分属性。因此,您同意Oleg,不同意我的方法,但同意可以将代码更改为更可测试的代码?eytanfb,您将更改测试,而不是测试的代码库@bot well Design code更可测试,而不是相反,我还没有看到一个设计良好的代码,它的javadoc说“这个方法只是为了测试目的-请不要使用它”,仅供参考,所以社区同意我的观点。你需要再次阅读你链接到我的问题。确保你阅读了你把我联系到的问题的所有答案和评论,因为它完全符合我的观点,而不是你的。我很困惑。为什么需要内部实例从外部类本身访问外部类中已经存在的方法?需要维护一个内部文件列表是什么?您计划在哪里添加createInstance方法?相关
public void createInnerInstance(Other other)
{
    Inner inner = new Inner(other);
    inners.add(inner);
}