2016-12-15 1 views
0

리소스 파일에서 문자열을 반환하는 멤버가 있습니다.이 멤버가 실수로 변경할 수 있기 때문에 단위 테스트를 수행하고 싶습니다. 이것은 리플렉션을 사용하여 달성 할 수 있다고 생각하지만 리플렉션을 사용하지 않는 방식으로 수행하도록 요청 받았습니다.리플렉션을 사용하지 않고 보호 된 멤버 조롱

회원은 다음과 유사합니다.

protected override string StringOne 
    { 
     get 
     { 
      return Resources.String; 
     } 
    } 

회원에 대한 반품 설정은 다음과 같이 수행 할 수 있습니다.

및 .verifiable()을이 끝에 추가 할 수 있습니다. 그러나 문자열이 반환되는지 확인하는 방법을 찾을 수 없습니다. 또는 .returns가 ("") 값이 예상과

mock.Verify(); 

를 호출 회원이 올바른 문자열을 반환 것을 확인하는 것입니다 있는지, 오른쪽) (.verifiable으로이 설정하여 그 생각에 나는 오전 또는 단순히 회원이 시험 중 어느 시점에 전화를 받았습니까?

+0

'Veriffy'는 조롱 된 멤버가 실제로 호출되었는지 확인합니다. 조롱 한 멤버가 설정 한 것을 반환하는지 확인하지 않습니다. 모의가 올바르게 작동하는지 확인하고 싶지는 않습니다. (MOQ에 의해 보장되어야합니다). * 실제로는 * – HimBromBeere

+0

이라면, 그렇게 간단하지 않다고 생각합니다. 단위 테스트 클래스에서 테스트 할 클래스를 상속하려면? –

+0

수업에서 파생되어 회원 중 하나를 모의 테스트하려고하십니까? – HimBromBeere

답변

0

여기서 발생하는 문제는 클래스 외부에서 사용할 수없는 것을 테스트하려는 것입니다. 테스트는 클래스의 공용 인터페이스 만 테스트하여 공용 동작이 동일하게 유지되는 한 클래스 내부를 변경할 수 있도록해야합니다.

하나는 이러한 속성이 공개되는 또 다른 클래스로이 코드를 이동하는 것입니다, 그 방법은 테스트 그냥 새 공용 속성을 호출 및 반환을 확인할 수 있습니다이 경우

, 나는 당신이 두 가지 옵션이 있다고 생각 속성의 값을 사용해야하는 클래스는 새 클래스를 호출 할 수 있습니다. 상속은 일반적으로 코드를 공유하는 좋은 방법이 아닙니다 (이 개념을 설명하는 블로그 게시물 : http://www.blinkingcaret.com/2016/04/13/composition-superior-inheritance/)

다른 하나는 이러한 속성이 어디에서 사용되는지 테스트하는 것입니다. 예를 들어 StringOne의 값을 또 다른 조롱 된 클래스에 전달하는 메서드가있는 경우 올바른 값이 전달되었는지 또는 파일 경로에서 사용되는 지 확인하면 파일 경로가 끝났음을 테스트해야합니다 올바른지 등

+0

그래, 나는 이것이 결과가 될 거라고 생각했다. 필자는 코드를 작성하지 않았으며 분명히 테스트 된 것으로 기록되지 않았습니다. 나는 보호 된 물건을 그냥 떠날 것이고, 미래에 누군가가 문제를 해결하기를 원한다면! :) 충고와 도움을 주셔서 감사합니다. –

관련 문제