测试没有返回值的方法

上一篇 / 下一篇  2010-12-03 16:53:42 / 个人分类:学习中

在使用JUnit进行单元测试的时候,常会碰到返回值为viod的方法.那该怎么测试这样的方法呢?
分析难点:
    一般测试总是将一个期望值与一个实际值进行比较。这里直接这样去思考肯定是行不同的。
方法:
     没有返回值的方法,一定有一些可以被观测的地方,比如说一个对象的状态被改变,如果你实在找不出,那恭喜你这个就不需要测试了。因为这个方法根本没有用。所有你必须找到合适的断点。犹如调试程序那样设置断点。找出了断点那就也可以设置一个断言了。恭喜你,你已经找出了方法解决这样的方法的测试了。

现在来试试你分析和找断点的能力吧!现在我们测试一个对象放入容器。Collection.add(Object)方法没有返回值。
Java代码 复制代码

   1. public class AddToArrayListTest extends TestCase{  
   2.   public void testListAdd(){  
   3.      List list = new ArrayList();  
   4.      assertFalse(list.contains("hello"));  
   5.      list.add("hello");  
   6.      assertTrue(list.contains("hello"));  
   7.        }  
   8.   } 

 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. 查询空容器中是否存在添加的元素。

记住当你在测试的时候能找到“是否存在”这样的字样那么你就基本能进行测试设计了。


现在看看另外一种情况吧! 如果一个方法从其他某个地方获取数据,但不显式地声明数据是否被成功的装载,该怎么测试呢?下面看看以下这个方法可性不?
Java代码 复制代码

   1.   public void testLoadProperties() throws Exception{  
   2.     Properties properties = new Properties();  
   3.     properties.load(new FileInputStream("application.properties"));  
   4.     assertEquals("root", properties.getProperty("usename"));  
   5.     assertEquals("123456", properties.getProperty("password"););     
   6. }  
   7. 注意,这个测试有些事不可靠,因为它从测试程序之外,的其他文件获取数据。这个测试使用load()方法,并验证它的主要:期望的数据被正确地从配置文件中装载进来。  
   8.  
   9. 讨论:  
  10.   以上这个方法是否有效,取决于要测试的方法是否有可以观测的断点,任何一个方法要么有返回值,要么有可以观测的断点。  
  11.  
  12. 总结: 如果没有办法找到可以观测的一个断点,那么请你向办法为测试创建一个出来。 



TAG:

 

评分:0

我来说两句

Open Toolbar