如何在JUnit中模拟ERP系统

时间:2013-07-25 14:33:08

标签: java junit mocking erp

我正在努力将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连接的方法?

2 个答案:

答案 0 :(得分:5)

我认为你的意思是模拟Connection对象?目前还不清楚Connection是一个接口还是一个类。一些模拟对象库仅适用于接口。以下是一些比较流行的Java模拟对象库jmockmockitoeasymock

基本思想是创建一个模拟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系统的更改,并允许您模拟界面并测试交互。