java – 仅仅为了测试而使用额外的构造函数有多好?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 仅仅为了测试而使用额外的构造函数有多好?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1775字,纯文字阅读大概需要3分钟。
内容图文
![java – 仅仅为了测试而使用额外的构造函数有多好?](/upload/InfoBanner/zyjiaocheng/796/4e1a87a64edf45fe8b4b783d76db2160.jpg)
目前我需要编写SecondClass并决定使用这种解决方案编写,否则它将无法测试.
@Component
public class FirstClass {
public void doStuff() {
System.out.println("First Class stuff!");
}
}
@Component
public class SecondClass {
private final Random random;
private final FirstClass firstClass;
@Autowired
public SecondClass(FirstClass firstClass) {
this(new Random(), firstClass);
}
public SecondClass(Random random, FirstClass firstClass) {
this.random = random;
this.firstClass = firstClass;
}
public void doOtherStuff() {
firstClass.doStuff();
System.out.println("Second Class stuff " + random.nextInt(10));
}
}
我的同事不喜欢我解决它的方式,喜欢这样的SecondClass实现:
@Component
public class SecondClass {
private Random random;
private final FirstClass firstClass;
@Autowired
public SecondClass(FirstClass firstClass) {
this.random = new Random();
this.firstClass = firstClass;
}
public void doOtherStuff() {
firstClass.doStuff();
System.out.println("Second Class stuff " + random.nextInt(10));
}
public void setRandom(Random random) {
this.random = random;
}
}
我不同意这种解决方案,因为我认为Random是这个类的必要部分,它不会在运行时更改,并且setter只是测试目的所必需的,这就是为什么我更喜欢带有两个构造函数的解决方案.
我们还想出了这种构造函数:
@Autowired(required = false)
public SecondClass(FirstClasss firstClass, Random random) {
this.random = (random == null ? new Random() : random)
...
}
但实际上在构造函数中注入了更多的组件,因此如果需要所有这些组件将更为可取.
我很感兴趣,如果有人在此之前有这种经历吗?您如何看待这种情况,以及是否有更好的方法来解决这个问题?
解决方法:
你的问题源于最后的领域.跟随鲍勃叔叔,随意让他们受到保护,这样你就可以在测试课上给他们写信.您不是在编写接口,而是在编写代码,因此访问修饰符并不重要,并且受保护很好,因为它允许包访问.
或者你可以通过硬连接将它们自己设置在你的测试用例中,比如ReflectionUtils.setField
内容总结
以上是互联网集市为您收集整理的java – 仅仅为了测试而使用额外的构造函数有多好?全部内容,希望文章能够帮你解决java – 仅仅为了测试而使用额外的构造函数有多好?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。