2016-06-03 3 views
0

이 메소드를 단위 테스트하고 싶습니다. 나는 mxbean을 조롱 할 필요가있다, 그러나 나는 그것을 어떻게하는 지 전혀 모른다. 누군가가이 방법을 단위 테스트하는 방법을 보여 주시겠습니까?유닛 테스트 조롱을 포함한 메소드

@Override 
public int compare(Long threadId1, Long threadId2) { 
    ThreadMXBean mxbean = ManagementFactory.getThreadMXBean(); 
    return Long.compare(mxbean.getThreadCpuTime(threadId2), mxbean.getThreadCpuTime(threadId1)); 
} 
+0

나는 동의하지 않는다. ManagementFactory 호출을 OP 자체 응용 프로그램의 정적 호출로 대체하면 올바른 질문이됩니다. –

답변

1

사실 그대로 비웃을 수는 없습니다. 지역 변수를 필드로 이동해야합니다. 이제

ThreadMXBean mxbean = ManagementFactory.getThreadMXBean(); 

@Override 
public int compare(Long threadId1, Long threadId2) { 
    return Long.compare(mxbean.getThreadCpuTime(threadId2), mxbean.getThreadCpuTime(threadId1)); 
} 

당신이 당신의 시험 모의에 필드를 재 할당 할 수 있습니다 (I는 Mockito를 사용 하겠지만, 다른 프레임 워크도 존재) :

@Test 
public void yourTestMethod(){ 
    YourClass yourClass = new YourClass(); 
    ThreadMXBean mock = Mockito.mock(ThreadMXBean.class) 
    Mockito.when(mxbean.getThreadCpuTime(1L)).thenReturn(1); 
    Mockito.when(mxbean.getThreadCpuTime(2L)).thenReturn(2); 
    yourClass.mxbean = mock; 
    assertThat(yourClass.compare(1L, 2L), is(-1)); 
} 

을하지만 그것은 Mockito를 사용하는 경우에도 좋네요 JUnit을 러너와 Mockito가 자동으로 모의 객체를 만들 수 있습니다

@RunWith(MockitoJUnitRunner.class) 
public class YourTest{ 

    @InjectMocks YourClass yourClass = new YourClass(); 
    @Mock ThreadMXBean mock; 

    @Test 
    public void yourTestMethodDoesntNeedToCreateMocksAnymore(){ 
     Mockito.when(mxbean.getThreadCpuTime(1L)).thenReturn(1); 
     Mockito.when(mxbean.getThreadCpuTime(2L)).thenReturn(2); 
     assertThat(yourClass.compare(1L, 2L), is(-1)); 
    } 


} 

마지막 : 모든 Mockito를 대체 할 경우 시험은 더 읽기 얻을 * 고정 수입, 예를 들어 통화를.

MyFoo foo = mock(MyFoo.class); 
when(foo.bar()).thenReturn(baz); 
+0

@ NicolasFilotto 분명히 우리는 "실제"코드와 다른 경험을 가지고 있습니다. 제 현실 세계에서 우리는 코드를 테스트 할 수있게하려고 노력합니다. –

+0

나는 사람들이 다른 사람들의 대답에 대해 불평하는 방법을 좋아하지만 그들 자신을 제공하지는 않는다. 당신이 질문을 좋아하지 않으면, downvote 또는 그것을 닫습니다. 당신이 대답을 좋아하지 않으면, 그것을 downvote. 그러나 나는 판사가 될 것이며 나는 대답할만한 가치가 있다고 생각한다. –

+0

그런 다음 자유롭게 그것을 무시하자. 또는 그것을 닫으십시오. –

관련 문제