在使用JUnit进行单元测试的时候,常会碰到返回值为viod的方法.那该怎么测试这样的方法呢?
[b] 分析难点:[/b]
一般测试总是将一个期望值与一个实际值进行比较。这里直接这样去思考肯定是行不同的。
[b]方法:[/b]
没有返回值的方法,一定有一些可以被观测的地方,比如说一个对象的状态被改变,如果你实在找不出,那恭喜你这个就不需要测试了。因为这个方法根本没有用。所有你必须找到合适的断点。犹如调试程序那样设置断点。找出了断点那就也可以设置一个断言了。恭喜你,你已经找出了方法解决这样的方法的测试了。
现在来试试你分析和找断点的能力吧!现在我们测试一个对象放入容器。Collection.add(Object)方法没有返回值。
public class AddToArrayListTest extends TestCase{
public void testListAdd(){
List list = new ArrayList();
assertFalse(list.contains("hello"));
list.add("hello");
assertTrue(list.contains("hello"));
}
}
这个是一个简单的测试程序。
说说思路吧!
1. 创建一个新的空容器
2. 判断这个容器为空
3. 将对象加入到容器中。
4. 查询空容器中是否存在添加的元素。
记住当你在测试的时候能找到“是否存在”这样的字样那么你就基本能进行测试设计了。
现在看看另外一种情况吧! 如果一个方法从其他某个地方获取数据,但不显式地声明数据是否被成功的装载,该怎么测试呢?下面看看以下这个方法可性不?
public void testLoadProperties() throws Exception{
Properties properties = new Properties();
properties.load(new FileInputStream("application.properties"));
assertEquals("root", properties.getProperty("usename"));
assertEquals("123456", properties.getProperty("password"););
}
注意,这个测试有些事不可靠,因为它从测试程序之外,的其他文件获取数据。这个测试使用load()方法,并验证它的主要:期望的数据被正确地从配置文件中装载进来。
讨论:
以上这个方法是否有效,取决于要测试的方法是否有可以观测的断点,任何一个方法要么有返回值,要么有可以观测的断点。
总结: 如果没有办法找到可以观测的一个断点,那么请你向办法为测试创建一个出来。