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