3

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

4

2 回答 2

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);
于 2013-07-25T14:44:33.240 回答
1

如果Connection是一个接口,那么您可以简单地使用类似于Mockito的东西来验证发送给它的消息。

如果Connection是一个具体的类,那就更难了。我将创建一个接口,该接口复制连接类公共方法并委托给适当的 ERPConnection实例。

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 系统的变化隔离开来,并允许您模拟界面并测试交互。

于 2013-07-25T14:39:08.993 回答