如何为复杂的底层实体编写测试用例?

时间:2011-11-07 08:15:48

标签: java junit4

我正在为现有系统编写单元测试用例。底层类的体系结构本身非常复杂。

  

块引用   RequestHanndler ==>进程==>订单===>取决于==>服务层==连接到==>数据库层。

我正在为RequestHandler编写一个测试用例。测试中的方法(doProcess())创建了Order类的新实例。 Order类本身对服务层的依赖性非常高。我想创建一个原子测试用例,因此,不会执行任何其他代码层。

为这些scenrios创建测试用例的最佳流程应该是什么?

2 个答案:

答案 0 :(得分:2)

当你想为高度耦合的代码编写单元测试时,它可能会有点复杂。为了使单一测试更容易,您应该更好地依赖抽象而不是真正的实现。例如。 Order类不应该依赖于服务层的实际实现,而是引入一个更易于模拟的接口,而不是可能设置为final的类。

由于您的RequestHandler负责创建Order实例,因此您必须提供一种在单元测试中模拟订单类的方法。一种简单的方法是创建一个简单地创建新订单实例的受保护方法。

protected Order createOrder(String someParam) {
  return new Order(someParam);
}

在单元测试中,您现在可以扩展类并覆盖工厂方法。 使用Mockito这看起来像:

protected Order createOrder(String someParam) {
  Order order = Mockito.mock(Order.class); // create mock object
  // configure mock to return someParam when 
  //  String Order#getSomeParam() gets invoked
  Mockito.doReturn(someParam).when(order).getSomeParam(); 
  return order;
}

答案 1 :(得分:1)

此类系统的单元测试的典型方法是嘲弄。 java有几个模型框架。我个人使用EasyMock,但还有其他人。

所以,我认为你应该首先尝试测试请求处理程序的逻辑。你应该模拟Order(即使用mockup frameork创建虚拟,而不是真实的订单实例)。测试此层时,请更深入并开始测试内部层。

其他策略从下到上,即首先测试内部层。这种策略可能是“正确的”,但是你不会得到可以向经理展示的快速结果,因为管理人员通常喜欢看到“大”的图片,而且很少涉及细节。

底线:祝你好运。