我正在将JUnit测试添加到企业解决方案的web服务中。我的问题是:如果可能的话,我如何在JUnit测试中模拟ERP系统?
例如,我有一个getOrders(Connection con, String customerId)方法。然而,它向企业资源规划系统发出一个电话,列出以下所有订单:
public List<Order> getOrders(Connection con, String customerId) {
// Call ERP system
orders = con.fetchOrders(customerId);
// Manipulate result
orders...
return orders;
}有什么办法来模拟ERP连接吗?
发布于 2013-07-25 14:44:33
我想你是说模仿连接对象吧?不清楚连接是接口还是类。一些模拟对象库只在接口上工作。下面是一些比较流行的Java模拟对象库jmock、莫基托和易模拟
基本思想是创建一个模拟Connection对象,并让它返回您想要测试的数据。
例如,使用easymock:
String customerId =...
List<Order> myOrders = ...
Connection mockConnection = EasyMock.createMock(Connection.class);
EasyMock.expect(mockConnection.fetchOrders(customerId)).andReturn(myOrders);
EasyMock.replay(mockConnection);
//call system under test:
List<Orders> results = getOrders(mockConnection, customerId);
List<Orders> expectedResults = ....
assertEquals(expectedResults, results);发布于 2013-07-25 14:39:08
如果Connection是一个接口,那么您可以简单地使用类似于莫基托的东西来验证发送给它的消息。
如果Connection是一个具体的类,那么它就更难了。我会创建一个接口,该接口复制连接类、公共方法并将其委托给适当的ERP Connection实例。
interface ERPConnection {
List<Order> fetchOrders(String customerID);
}
class MyConnection implements ERPConnection {
private Connection _conn;
public List<Order> fetchOrders(string customerID) {
return _conn.fetchOrders(customerID);
}
}现在,在您的代码中,您将依赖ERPConnection接口,而不是Connection具体类。这会让您感觉到很多变化,但它将使您远离ERP系统的更改,并允许您模拟接口并测试交互。
https://stackoverflow.com/questions/17860998
复制相似问题