2016-06-18 2 views
0

EJB 테스트에 Mockito를 사용하고 싶습니다. get() 메서드는 데이터베이스 쿼리 결과와 함께 반환되고 transformedGet()은 세션 빈에서 비즈니스 논리를 수행합니다.모의 된 메서드가 예상 값 대신 null을 반환합니다.

mockFoo.get()이 직접 호출되면 예상대로 작동합니다. 그러나 mockFoo.transformedGet()get() 메서드를 호출하면 예상 값 대신 null이 반환됩니다.

비즈니스 로직을 테스트하고 데이터베이스 쿼리를 격리하고 싶습니다. Mockito로이 작업을 수행 할 수 있습니까? 테스트에

등급 :

public class Foo { 
    public String get() { 
     return "get"; 
    } 

    public String transformedGet() { 
     return "transformed" + get(); 
    } 
} 

테스트 :

@Test 
public void mockitoTest() { 
    Foo mockFoo = Mockito.mock(Foo.class); 
    String expected = "test"; 

    Mockito.when(mockFoo.get()).thenReturn(expected); 

    String actual = mockFoo.get(); 
    Assert.assertEquals(actual, expected); 
    String transformed = mockFoo.transformedGet(); 
    Assert.assertEquals(transformed, "transformed" + expected); 
} 

답변

0

당신은 테스트중인 클래스를 조롱하고 있습니다. 모든 메소드는 변형 된 Get()을 포함하여 조롱됩니다. 반환 할 내용을 Mockito에게 말하지 않았으므로 기본적으로 null을 반환합니다.

get()을 별도의 클래스에두고 테스트중인 클래스에 삽입하는 것이 가장 좋습니다. 테스트는 테스트 대상 클래스가 아니라이 주입 된 종속성을 조롱합니다.

설명서에 설명 된대로 spy 또는 partial mock을 사용할 수도 있지만 이상적은 아닙니다.

관련 문제