나는 테스트 할 동작이있는 보호 된 메서드로 봉인 된 클래스가 있습니다. 이렇게하면 직접 테스트하기가 어렵고 모의하기가 어렵습니다.C# : 봉인 된 클래스에서 모의 및 보호 된 (또는 개인) 메서드 - 접근 방식
TDD 방식으로 개발되지 않은 코드베이스에 있으며, 이제 특정 기능에 대한 단위 테스트를 추가하고 있습니다.
이 경우 가능한 일반적인 접근 방법은 무엇입니까? 현재 내가 가지고있는 것 :
- 수업을 개봉하지 않았습니까? 그런 다음 테스트 코드에서 클래스에서 파생 된 프록시 또는 어댑터를 만들어 보호 된 메서드에 대한 액세스를 터널링합니다.
- 보호 된 메서드의 비헤이비어를 대리자/함수 작성자로 가져 와서 다시 삽입합니다. 그런 다음 독립적으로 분해 된 동작을 테스트하십시오.
- 보호 된 메서드를 사용하는 상속 계층 구조에서 가장 가까운 public 메서드를 호출하여 테스트합니다. 시험 대상이 아닌 다른 코드가 변경되면 위험에 노출되어 조잡한 테스트 결과를 초래할 수 있습니다.
- 보호 된 방법에 액세스하려면 리플렉션을 사용하십시오. 그런 다음 직접 호출하십시오.
더 이상 있습니까?
몇 번이나 공용 메서드를 테스트하려면 개인 메서드를 조롱하는 것이 편리합니다. 내 생각에 그것은 주요 사용 사례입니다. – anthares
@anthares : 그건 잘못된 것 같습니다. 'private' 메쏘드가'public' 메쏘드 구현의 일부분이라면 그것은 조롱 거리가되어서는 안됩니다. – jason
글쎄요, 예를 들면 : 리플렉션을 사용하여 특정 보호 된 메소드를 직접 호출하기 위해 필요한 모든 것을 조롱하는 데 좋은 반나절이 걸렸습니다. 가장 가까운 공개 방법에서 모든 것을 조롱해야한다면 완성을 위해 자녀에게 과제를 전달해야 할 수도 있습니다. 그것은 내가 일반적으로 당신에게 동의하지 않는다고 말하는 것은 아닙니다. 단지 코드베이스가 다른 실질적인 제약이 있다는 것입니다. (+1) –