TestNG, Mockito 및 지금 PowerMockito를 사용하여 기존 코드 기반에 대한 단위 테스트를 작성하여 개인 및 정적 메서드를보다 쉽게 테스트해야합니다. 현재 우리가 테스트하고있는 클래스에서 개인 void 메서드에 대한 테스트를 작성하려고하지만이를 파악할 수 없습니다. 일반적인 PowerMock API에는 replayAll()
, verifyAll()
및 expectLastCalled()
이라는 메서드가 있으며 대부분의 용도에 적합합니다. PowerMockito 방법을 설명하는 좋은 문서를 찾을 수 없습니다. 이것에 대한 설명이나 통찰력이 있으면 대단히 감사하겠습니다. 테스트에PowerMockito 및 TestNG를 사용하여 개인 무효 메서드 호출을 예상하고 확인하는 방법은 무엇입니까?
방법 :
private void pVMethod(Type param) throws Exception {
param.setA(StaticClass.methodA().toString());
param.setB(StaticClass.methodB().toString());
// getMemo(String label) is in a public class in same package
param.setC(getMemo("memo.provider"));
param.setD(getMemo("memo.item"));
try {
param.setTimestamp(DataTypeFactory.newInstance().newXMLGregorianCalendar(newjava.util.GregorianCalendar()));
} catch (SomeException e) {
...
throw new Exception();
}
}
테스트 시도 : 당신이 개인 무효의 동작을 확인하려는 경우, PowerMockito에서
:
이@Test(expectedExceptions = Exception.class)
public void pVMethod() throws Exception {
TestClass testMock = mock(TestClass.class);
Exception exception = mock(Exception.class);
// StaticClass staticClassMock = mock(StaticClass.class); ??
mockStatic(StaticClass.class);
// when(..) and thenReturn(..) are static imports from PowerMockito library
when(StaticClass.methodA()).thenReturn("stubStringA");
when(StaticClass.methodB()).thenReturn("stubStringB");
doThrow(exception).when(param).setTimestamp(Mockito.any(XMLGregorianCalendar.class));
// Docs say method name can be inferred via reflection
Whitebox.invokeMethod(tested, event);
// this is where things are hairy. testedSpy is defined at the top level
verifyPrivate(testedSpy).pVMethod(testMock);
}
약간 주제에서 벗어난에서 가져온하지만 * 왜 * 당신은 개인적인 방법을 테스트? 단위 테스트는 구현이 아니라 기능을 테스트해야합니다. – blgt
관리자가 말했습니다. 나는이 규모로 테스트하는 것을 처음보고 왜 이런 일을 할 것인가,하지 않을지 모릅니다. 그러나 나는 powermock이 개인적이고 정적 인 방법/필드 등을 다룰 수없는 욕구를 만족시키기 위해 만들어 졌다고 말할 수있다. – kurofune
조금 더 많은 문맥을 제공하면 도움이 될 것입니다. 사적인 방법을 테스트 할 수있는 몇 가지 합법적 인 이유가 있지만, 전체 그림이 없으면 조언을하기가 더 어렵습니다. – blgt