2013-07-25 4 views
2

JUnit 테스트를 엔터프라이즈 솔루션의 웹 서비스에 추가하려고합니다. 내 질문은; 가능하면 JUnit 테스트에서 ERP 시스템을 조롱합니까?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 연결을 조롱하는 방법은 없습니까?

답변

5

Connection 객체를 모의한다고 생각하십니까? Connection이 인터페이스 또는 클래스인지 여부는 분명하지 않습니다. 일부 모의 객체 라이브러리는 인터페이스에서만 작동합니다. 여기에서 더 인기있는 자바 모의 객체 라이브러리 jmock, mockitoeasymock

기본적인 아이디어는 모의 Connection 객체를 생성하고 그것을 테스트 할 데이터를 반환하는 것 중 일부입니다.

// create mock object (usually an instance member of your test) 
@Mock Connection connection; 

// initialize the mocks in the test setup 
MockitoAnnotations.initMocks(this); 

// create the thing you want returned by call to method 
List<Order> orders = new ArrayList<Order>(); 

// specify what call to mock should do 
when(connection.fetchOrders("custid")).thenReturn(orders); 

Mockito만큼 그들이 마지막 아니에요으로 클래스를 조롱 수 있으며, 정적 메서드를 조롱 할 수 없습니다 Mockito

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); 
+0

감사합니다.이 기능은 구현에 가장 적합합니다. – Mike

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 시스템의 변경으로부터 당신을 보호하고 인터페이스를 조롱하고 상호 작용을 테스트 할 수있게 해줍니다.

+0

그건 영리한 일입니다. 그 자신을 생각하지 않으려면 어리석은 느낌을 가라..) 나는 내일 코드를 점검하고 그것이 가능한지 알아볼 것이다. – Mike

0

당신은 사용할 수 있습니다 : 예를 들어

는 EasyMock에 사용.