我正在为现有系统编写单元测试用例。底层类的体系结构本身非常复杂。
块引用 RequestHanndler ==>进程==>订单===>取决于==>服务层==连接到==>数据库层。
我正在为RequestHandler
编写一个测试用例。测试中的方法(doProcess()
)创建了Order
类的新实例。 Order
类本身对服务层的依赖性非常高。我想创建一个原子测试用例,因此,不会执行任何其他代码层。
为这些scenrios创建测试用例的最佳流程应该是什么?
答案 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创建虚拟,而不是真实的订单实例)。测试此层时,请更深入并开始测试内部层。
其他策略从下到上,即首先测试内部层。这种策略可能是“正确的”,但是你不会得到可以向经理展示的快速结果,因为管理人员通常喜欢看到“大”的图片,而且很少涉及细节。
底线:祝你好运。