2014-06-20 5 views
0

생성자에서 제공되는 인수에 따라 다른 값을 반환하는 mocked 인스턴스 목록을 만드는 방법을 찾고 있습니다.MockUp 인스턴스 목록

public interface ValueObject { 
    int getValueInt(); 
    String getValueString(); 
} 

@RunWith(JMockit.class) 
public class DemoTest { 

    @Test 
    public void testDemo() throws Exception { 
     class ValueObjectMock extends MockUp<ValueObject> { 
      private final int valueInt; 
      private final String valueString; 

      ValueObjectMock(int valueInt, String valueString) { 
       this.valueInt = valueInt; 
       this.valueString = valueString; 
      } 

      @Mock 
      int getValueInt() { 
       return valueInt; 
      } 


      @Mock 
      String getValueString() { 
       return valueString; 
      } 
     } 


     final List<ValueObject> objects = new LinkedList<ValueObject>(); 

     for (int i = 0; i < 10000; i++) { 
      objects.add(new ValueObjectMock(i, String.valueOf(i)).getMockInstance()); 
     } 

     assertTrue(objects.get(5).getValueString().equals("5")); 
    } 
} 

이렇게하면 테스트는 약 20 분 실행됩니다. 다른 모의의 목록을 만드는 또 다른 방법이 있습니까?

추신 : 인터페이스에 가짜 구현을 사용해야한다고 생각합니다.

인터페이스를 구현하는 가짜 개체를 사용하여 해결되었습니다.

+0

실물 크기 클래스의 각 인스턴스화는 인터페이스에 대한 새로운 조롱 된 구현 클래스를 생성합니다. 그렇기 때문에 수천 번 할 수있는 저렴한 작업은 아닙니다. 그러나 실제로 이것에 대한 필요성이 있습니까? 이 경우 인터페이스를 구현하는 간단한 클래스를 만드는 것이 더 쉽습니다. –

+0

나는이 길을 고려하고있다. 그러나 조롱이 도움이 될지 궁금해졌습니다. 그러나 인터페이스를 변경하면 가짜 오브젝트 변경이 발생할 수도 있습니다. 인터페이스가 다른 팀에 의해 관리 될 때 사소하지 않습니다. 아마도 다른 팀이 테스트 목적으로 가짜 개체를 관리해야 할 것입니다. –

답변

0

모의 명단의 인스턴스화는 매우 어렵습니다. 그래서 더 나은 솔루션은 인터페이스를 구현하는 가짜 객체를 사용합니다. 그러나 인터페이스가 바뀔 때마다 위조 된 객체는 인터페이스로 업데이트되어야합니다.

관련 문제