我正在努力将JUnit测试添加到企业解决方案的Web服务中。我的问题是;我如何 - 如果可能的话 - 在JUnit测试中模拟ERP系统?
例如,我有getOrders(Connection con, String customerId)
方法。然而,它打电话给ERP系统列出所有订单,如:
public List<Order> getOrders(Connection con, String customerId) {
// Call ERP system
orders = con.fetchOrders(customerId);
// Manipulate result
orders...
return orders;
}
任何模拟ERP连接的方法?
答案 0 :(得分:5)
我认为你的意思是模拟Connection对象?目前还不清楚Connection是一个接口还是一个类。一些模拟对象库仅适用于接口。以下是一些比较流行的Java模拟对象库jmock,mockito和easymock
基本思想是创建一个模拟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);
答案 1 :(得分:1)
如果Connection
是一个界面,那么您只需使用与Mockito类似的内容来验证发送给它的邮件。
如果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系统的更改,并允许您模拟界面并测试交互。