3

エンタープライズ ソリューションの Web サービスに JUnit テストを追加する作業を行っています。私の質問は; 可能であれば、JUnit テストで ERP システムを模擬するにはどうすればよいですか?

たとえば、getOrders(Connection con, String customerId)メソッドがあります。ただし、ERP システムを 1 回呼び出して、次のようにすべての注文を一覧表示します。

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 に答える