编程语言
首页 > 编程语言> > java – 在测试期间只使用特殊构造函数是代码味道吗?

java – 在测试期间只使用特殊构造函数是代码味道吗?

作者:互联网

假设我有一个类Foo,它只用类Bar实例实例化:

public Foo(Bar x) {
    this.a = x.a();
    this.b = x.b();
    ...
}

现在我想测试Foo,进一步假设很难创建具有所需状态的Bar实例.作为附加约束,字段a,b,…被声明为final,因此这些字段的setter不可用.

可能的方法是在Foo中创建一个额外的构造函数:

protected Foo(A a, B b, ...) {
    this.a = a;
    this.b = a;
    ...
}

此构造函数仅在测试期间使用,我将在此构造函数的注释中声明.

问题:这是代码味吗?

我想到的另一个解决方案是嘲笑Bar.想知道它是否是这种情况下的最佳做法?

解决方法:

模拟棒更有可能被认为是最佳实践.你应该可以创建一个MockBar,这样你就可以做到

Foo foo = new Foo(new MockBar(a, b));

标签:java,constructor,unit-testing,testing,code-smell
来源: https://codeday.me/bug/20190715/1462682.html