문제
나는 단순히 라이브러리 클래스를 확장하고 기본 매개 변수로 부모의 메소드를 호출하는 Java 클래스가 있습니다. 이를 위해 Junit 테스트를 어떻게 작성합니까? mockobjecttestcase도 좋습니다. 다음은 내가 말하는 내용의 예입니다.
public class ResourceBundleMessageSource {
public String getMessage(String key, Object[] objects, Locale locale) {
//Spring library method
}
}
public class MessageResource extends ResourceBundleMessageSource {
public String getMessage(String key) {
return (getMessage(key, null, Locale.getDefault());
}
}
래퍼 방법이 필요하지는 않지만 자주 호출 할 수 있습니다. 수업은 잘 작동합니다. 단위 테스트가 작성되는 방식에만 관심이 있습니다.
해결책
이 특별한 예에서 나는 probalby가 그것을 테스트하지 않을 것입니다.
테스트 해야하는 경우 다음과 같은 것을 시도하십시오.
@Test
public void getDefaultMessage() {
ResourceBundleMessageSource origSource = <create source>
MessageResource subSource = <create with same criteria as origSource>
String key = <some key that is locale-specific>
assertEquals(origSource.getMessage(key, null, Locale.getDefault()),
subSource.getMessage(key));
}
처음 두 줄을 쓰기가 어렵다면 테스트하지 않는 것이 더 합리적입니다. 이와 같은 여러 테스트가있는 경우 처음 두 줄을 설정 고정 장치로 이동하십시오.
다른 팁
당신이 당신의 수업을 약간 리팩토링하려는 경우, 나는 추천 할 것입니다 MessageResource
a MessageSource
확장보다는 예를 들어 ResourceBundleMessageSource
. 그런 다음 장치 테스트에서 모의를 사용했습니다. 이 같은:
public class MessageResource implements MessageSource {
private final MessageSource delegate;
public MessageResource(MessageSource delegate) {
this.delegate = delegate;
}
public String getMessage(String key) {
return delegate.getMessage(key, null, Locale.getDefault());
}
// need to implement three other MessageSource methods,
// simple pass-throughs to delegate
}
단위 테스트
public class MessageResourceTest {
private MessageSource mockDelegate;
private MessageResource messageResource;
@Before
public void setUp() throws Exception {
mockDelegate = //mock with your favorite framework, or by hand
messageResource = new MessageResource(mockDelegate);
}
@Test
public void testGetMessage() {
String key = "foo";
String actualMessage = messageResource.getMessage(key);
assertEquals(key, /* get key passed to mock delegate */ );
assertSame(Locale.getDefault(), /* get Locale passed to mock delegate */);
assertEquals(/*expected message from mock*/, actualMessage);
}
}
나는 그것이 단위 테스트를 작성할 가치가 있다고 생각하지 않습니다. 이미 ResourceBundleMessagesSource.getMessage ()에 대한 테스트가 있다면 충분해야합니다.
제휴하지 않습니다 StackOverflow