这是Java中良好的类设计实践吗?

时间:2019-02-08 05:47:17

标签: java design-patterns

public class OneClass {
        private AnotherClass anotherClass = new AnotherClass();

        private void doOneJob(){
            anotherClass.doOtherJob();
        }
    }

在上面的代码中,AnotherClass被实例化并保存为OneClass的类变量。

  • 这种设计的后果是什么?
  • 这是一个好习惯吗?
  • 此支持单元将进行测试吗?

2 个答案:

答案 0 :(得分:4)

这称为组成,是Java语言的基本组成部分。没什么问题,在很多情况下可能是必不可少的。

我唯一要做的更改是使用依赖项注入来简化测试,即,您可以通过以下方式提供模拟AnotherClass对象:-

public class OneClass {
    private AnotherClass anotherClass;

    public OneClass(AnotherClass anotherClass){
        this.anotherClass = anotherClass;
    }

    private void doOneJob() {
        anotherClass.doOtherJob();
    }
}

答案 1 :(得分:0)

很难“单元”测试,因为您不能以正常方式模拟“外部”依赖项。 (例如,对于常规测试,您可以使用模拟覆盖私有字段)

我认为最好有一个接受AnotherClass的构造函数,而不是可以通过构造函数在单元测试中对其进行模拟。