单元测试?如何测试void方法
作者:网络转载 发布时间:[ 2013/12/18 10:50:50 ] 推荐标签:
在作一个void方法的单元测试时,测试人员比较迷惑了(很多人也都在问void方法怎么测试) , void的方法是没有返回值的方法。那么如何它的结果呢。
在这里和大家一起讨论一下void应该怎么测试。
首先站在测试角度来分析void方法, 每一个方法的设计都有特定功能的,在下面列一些void方法可能作的事(不是全部,只体现特征)
1、 在方法体内对私有的对象实例进行属性设置
2、作了日志输出
3、调用另外实例方法
4、初始化某个类型变量(可能是私有的或者全局的)
5、。。。。。。
如上分析void 方法里不是独立存在的,它的工作必定反映在某一个地方,可能是某个类,某个文件,某个服务。。。等等
其次分析void的所作工作反映或影响了那个地方,找到他后,找出办法来获取这个类, 这个文件,这个服务。。。
下面举一个常见的例子
|
public class ServiceHolder {
private final Set<Object> services = new HashSet<Object>();
public void addService(Object service) {
services.add(service);
}
public void removeService(Object service) {
services.remove(service);
}
}
|
我们要测试void addService (..) 这个方法,首先分析它的影响或作用, 它影响的services 这个变量,这个变量是个私有的。 测试这个方法的正确,要验证services这个变量对象正确性。
如何获取这个私有变量? 我们用mock方法来作。
|
@Test
public void testAddService() throws Exception {
ServiceHolder tested = new ServiceHolder();
final Object service = new Object();
tested.addService(service);
// 获得私有变量今昔国内验证
Set<String> services = Whitebox.getInternalState(tested,"services");
assertEquals("Size of the "services" Set should be 1", 1, services.size());
assertSame("The services Set should didn't contain the expect service",
service, services.iterator().next());
}
|
Whitebox.getInternalState(tested,"services"); 是powermocker提供的一个方法通过反射获得对象实例。
上面这个例子列出来一个简单的void测试方法, 根据不同的情况可能获取验证对象的方法不同,根据实际情况去考虑。
另外PowerMock中org.powermock.reflect.Whitebox 类提供了绕过封装的一些方法。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
iOS单元测试mocha、chai、sinon和istanbul实现百分之百的单元测试覆盖率关于单元测试的总结及思考编写更好的Java单元测试的7个技巧Android单元测试框架Robolectric3.0介绍(一)使用Kiwi单元测试总结单元测试如此重要,为什么你不知道Python单元测试??使用装饰器实现测试跳过和预期故障对Controller的单元测试写好单元测试的10个技巧单元测试的重要性Angular单元测试系列??Component、Directive、Pipe 以及ServiceAndroid单元测试的整理提升单元测试体验的利器--Mockito使用总结iOS UnitTest单元测试Vue的单元测试探索(二)

sales@spasvo.com