2014-10-24 2 views
0

저는 Mockito 초심자이고 스텁을 만드는 데 문제가 있습니다. 나는 다음과 같은 JUnit 테스트를 만들었습니다다른 클래스에 중첩 된 Mockito, JUnit 및지도

class FieldsWrapper { 
    private Map<String, IMsgField> fields = new HashMap<String, IMsgField>(); 

    . . . 
    public Map<String, IMsgField> getFields() { 
     return fields; 
    } 
} 

:

public final class CMsgField implements IMsgField { 

    private String name; 
    private Object value; 

    public CMsgField(String name, Object value) { 
    this.name = name; 
    this.value = value; 
} 

. . . 
} 

을 다음과 내가 하나 개 더 클래스를 가지고

public interface IMsgField { 
    public String getName(); 
    public Object getValue(); 
} 

한 클래스는 인터페이스 위에 구현 : 나는 다음과 같은 인터페이스를 가지고 :

@Test 
public void test() { 
    FieldsWrapper fieldsWrapper = mock(FieldsWrapper.class); 
    stub(fieldsWrapper.getFields()).toReturn(new HashMap<String, IMsgField>()); 
    stub(fieldsWrapper.getFields().get("id_object")).toReturn(new CMsgField("id_object", "100")); 
    . . . 
} 

그리고 내가 위의 테스트에서 마지막 줄에 다음과 같은 예외를받은이 테스트를 실행했을 때 :

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
CMsgField cannot be returned by getFields() 
getFields() should return Map 
... 

을 나는 왜이 문제 좀 도와주십시오하지 않습니다. 미리 감사드립니다.

+0

라인'스텁 (fieldsWrapper.getFields는() ("id_object") 얻을.) toReturn (새 CMsgField ("id_object", "100")).'의심스러운. 'fieldsWrapper.getFields()'는 스텁이 아닙니다. 매핑에 필요한'CMsgField'를 추가하면됩니다. 또는지도 자체를 조롱합니다. – talex

답변

1

당신은 오히려 이런 식으로 진행해야 . testMap.get ("id_object")는 스텁되지 않은 Map의 메서드 호출이므로 작동하지 않습니다.

1

나도 모의지도 것 또는 그것을위한 지역 변수를 사용합니다) (만 fieldsWrapper.getFields 스텁하기 때문에

@Test 
public void test() { 
    Map<String, IMsgField> stubbedMap = new HashMap<String, IMsgField>(); 
    stubbedMap.put("id_object", new CMsgField("id_object", "100")); 
    FieldsWrapper fieldsWrapper = mock(FieldsWrapper.class); 
    stub(fieldsWrapper.getFields()).toReturn(stubbedMap); 
} 

:

@Test 
public void test() { 
    Map<String, IMsgField> testMap = new HashMap<String, IMsgField>(); 
    testMap.put("id_object", new CMsgField("id_object", "100")); 
    FieldsWrapper fieldsWrapper = mock(FieldsWrapper.class); 
    stub(fieldsWrapper.getFields()).toReturn(testMap); 
} 
0

조롱하는 동안 메소드 호출 체인을 수행 할 수 없습니다.

@Test 
public void test() { 
    FieldsWrapper fieldsWrapper = mock(FieldsWrapper.class); 
    HashMap<String, IMsgField>() map = new HashMap<String, IMsgField>(); 
    map.put("id_object", CMsgField("id_object", "100")); 
    stub(fieldsWrapper.getFields()).toReturn(map);  
. . . 
} 
관련 문제