(二)利用 Eclipse 进行单元测试

发表于:2009-04-02来源:作者:点击数: 标签:单元eclipseEclipse
测试 ServiceClass 类中的服务方法十分简单。假定测试要求为证明 runService() 方法并未运行 —— 换言之,返回的布尔结果是 false。在这种情况下,传递给 runService() 方法的 ICollaborator 对象被模拟 为期望调用 executeJob() 方法,并返回除了 “success
测试 ServiceClass 类中的服务方法十分简单。假定测试要求为证明 runService() 方法并未运行 —— 换言之,返回的布尔结果是 false。在这种情况下,传递给 runService() 方法的 ICollaborator 对象被模拟 为期望调用 executeJob() 方法,并返回除了 “suclearcase/" target="_blank" >ccess” 以外的字符串。通过这种方法,确保把布尔字符串 false 返回给测试。
  下面所示的是包含测试逻辑的 ServiceClassTest 类代码。

清单 3. 场景 1 的 ServiceClassTest 类样例代码
               
import org.jmock.Mock;
import org.jmock.cglib.MockObjectTestCase;
public class ServiceClassTest extends MockObjectTestCase {
 private ServiceClass serviceClass;
 private Mock mockCollaborator;
 private ICollaborator collaborator;
 
 public void setUp(){
  serviceClass = new ServiceClass();
  mockCollaborator = new Mock(ICollaborator.class);
 }
 
 public void testRunServiceAndReturnFalse(){
  mockCollaborator.expects(once()).method\
              ("executeJob").will(returnValue("failure"));
  collaborator = (ICollaborator)mockCollaborator.proxy();
  boolean result = serviceClass.runService(collaborator);
  assertFalse(result);
 }
}
  如果将在各种测试用例中执行公共操作,则在测试中包括 setUp() 方法是一种很好的想法。包括 tearDown() 方法也很不错,但不作严格要求,除非要运行集成测试
另请注意,使用 jMock 和 RMock,框架将在测试运行结束时或测试运行期间在所有模拟对象中检查所有期望。并不实际需要为每个模拟期望包括 verify() 方法。当作为 JUnit 测试运行时,测试将通过,如下所示:

图 3. 场景 1 测试通过

       
  ServiceTestClass 类将扩展 jMock CGLIB 的 org.jmock.cglib.MockObjectTestCase 类。mockCollaborator 是一个十分简单的 org.jmock.JMock 类。通常,用 jMock 生成模拟对象有两种方法:
• 要模拟接口,则使用 new Mock(Class.class) 方法
• 要模拟具体类,则使用 mock(Class.class, "identifier") 方法
 

原文转自:http://www.ltesting.net