는 EasyMock에 3.0 (와의 JUnit 4)와 함께 어떻게 할 것입니다 :
import org.junit.*;
import org.easymock.*;
import static org.easymock.EasyMock.*;
public final class EasyMockTest extends EasyMockSupport
{
@Test
public void mockRuntimeExec() throws Exception
{
Runtime r = createNiceMock(Runtime.class);
expect(r.exec("command")).andReturn(null);
replayAll();
// In tested code:
r.exec("command");
verifyAll();
}
}
위의 시험에 유일한 문제는 그 Runtime
객체 필요하다 테스트중인 코드로 전달되어 Runtime.getRuntime()
을 사용할 수 없습니다. 내가 종속성을 주입하는 것이 가장 좋은 방법이라고 동의하지만, 나는 그것을 조롱하는 것을 선호 - 제안에 대한
import org.junit.*;
import mockit.*;
public final class JMockitTest
{
@Test
public void mockRuntimeExec() throws Exception
{
final Runtime r = Runtime.getRuntime();
new NonStrictExpectations(r) {{ r.exec("command"); times = 1; }};
// In tested code:
Runtime.getRuntime().exec("command");
}
}
감사 : JMockit로 , 다른 한편으로는, 다음과 같은 시험은 그 문제를 피하고, 기록 할 수 있습니다. 그러나, 런타임의 조롱 된 인스턴스를 얻을 수있는 방법을 볼 수 없습니다 - 그것은 인터페이스가 아니며 전용 생성자가 있기 때문에 하위 클래스 수 있는지 잘 모르겠습니다. 아마도 나는 뭔가를 놓친거야? – Rich
넵, 그건 불가능하게 만듭니다. 내 업데이트를 확인하십시오. – Bozho
래퍼 접근 방식으로 갈 것입니다 :) 다시 한번 감사드립니다! – Rich