在作一个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 类提供了绕过封装的一些方法。