java – 这是集成测试还是单元测试?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 这是集成测试还是单元测试?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1945字,纯文字阅读大概需要3分钟。
内容图文
不仅仅是一个实际案例,这是我在试图获得单元测试和集成测试之间的详细差异时遇到的问题.
假设我有类Sum,它增加了两个整数:
class Sum{
int x;
int y;
public int add(){
return x + y;
}
...getters and setters...
}
我还有另一个负责验证结果的类,以确认值是预期的.仅举例来说,假设我们只想添加正数:
class ValidateSum{
Sum sum;
public boolean validate(){
if(sum.getX()>=0 and sum.getY()>=0){
return true;
}
else{
return false;
}
}
... getters and setters...
}
拥有ValidateSum可能没有多大意义,但我们只是为了举例而假设它.
现在我想为ValidateSum编写测试.如果我这样做:
@Test
public void testValidateSum(){
ValidateSum vs = new ValidateSum();
Sum sum = new Sum();
vs.setSum(sum);
boolean result = vs.validate();
assertTrue(result);
}
这是单元测试还是集成测试?
我知道单元测试只需验证ValidateSum中的功能,并且在某种程度上测试是这样做的:它只从Sum获取属性,而不是它的任何功能.
但另一方面,你也可以说你正在从Sum访问功能,即使ValidateSum只调用getter. Sum的getter的任何变化都会影响ValidateSum的测试,打破了单元测试的概念.
但如果是这种情况并且确实是集成测试,那么我如何为ValudateMethod的validate()编写单元测试?
我唯一想不到的是嘲笑Sum,所以它返回相同的值.即使Sum的getter中的逻辑发生变化,ValidateSum的测试也将保持不变.问题是,getter的模拟响应可能会增加不必要的复杂性,因为getter中逻辑更改的可能性非常低,而我们所做的只是获取属性.
我希望我的问题有道理,这更多是理论上的疑问.
编辑
谢谢您的回答.他们有重要的事情需要考虑.我选择的最佳答案之一是因为它引导我:
http://www.mockobjects.com/2007/04/test-smell-everything-is-mocked.html
它是真的:从理论上讲,我必须模拟Sum,这样才能成为一个纯粹的单元测试.但是对于大多数情况来说,增加复杂性的成本以及模拟属性获取者所花费的精力并不值得进行“最纯粹的”单元测试,而在实际情况下,单元和集成测试之间的差异是主观的.
解决方法:
不要嘲笑Sum.一般来说,吸气剂和制定者没有逻辑.模拟是删除类逻辑的过程,因此它不会干扰另一个类的测试.模拟没有任何逻辑的类,或者逻辑与当前测试无关的类是没有意义的.事实上,“不要模拟价值对象”是众所周知的单元测试原则.
您的测试不使用Sum类的任何逻辑.所以这是一个单元测试.
内容总结
以上是互联网集市为您收集整理的java – 这是集成测试还是单元测试?全部内容,希望文章能够帮你解决java – 这是集成测试还是单元测试?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。