사실 그대로 비웃을 수는 없습니다. 지역 변수를 필드로 이동해야합니다. 이제
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);
나는 동의하지 않는다. ManagementFactory 호출을 OP 자체 응용 프로그램의 정적 호출로 대체하면 올바른 질문이됩니다. –