문제

나는 단순히 라이브러리 클래스를 확장하고 기본 매개 변수로 부모의 메소드를 호출하는 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 ()에 대한 테스트가 있다면 충분해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top