【问题标题】:How to mock ERP system in JUnit如何在 JUnit 中模拟 ERP 系统
【发布时间】:2013-07-25 14:33:08
【问题描述】:

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

【问题讨论】:

    标签: java junit mocking erp


    【解决方案1】:

    我假设你的意思是模拟 Connection 对象?尚不清楚 Connection 是接口还是类。一些模拟对象库仅适用于接口。这里有一些比较流行的Java mock对象库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);
    

    【讨论】:

    • 谢谢,这最适合我的实现。
    【解决方案2】:

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

    【讨论】:

    • 这很聪明。自己不去想它觉得很愚蠢.. ;) 我明天会检查代码,看看是否可能。
    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多