C#에서 비공개 메서드 단위 테스트의 어려움
C#의 비공개 메서드 단위 테스트는 캡슐화된 특성으로 인해 까다로울 수 있습니다. Visual Studio에서는 자동으로 생성된 접근자 클래스를 제공하지만 테스트 중에 런타임 오류가 계속 발생할 수 있습니다.
코드 예제 및 테스트 사례
다음 코드 조각과 해당 테스트를 고려하세요.
<code class="language-csharp">// 被测试单元 class TypeA { private List<TypeB> myList = new List<TypeB>(); private void MyFunc() { /* 忽略处理过程 */ } } // 单元测试 public void MyFuncTest() { TypeA_Accessor target = new TypeA_Accessor(); target.myList.Add(new TypeA_Accessor.TypeB()); target.MyFunc(); }</code>
런타임 오류
컴파일에 성공했지만 유형 변환 문제로 인한 런타임 오류:
<code>无法将类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' 的对象转换为类型为 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]' 的对象。</code>
근본 원인은 target
이 예상된 TypeA_Accessor
이 아닌 TypeA
유형이기 때문입니다. 이 불일치로 인해 변환이 실패합니다.
솔루션
.NET Core 2.0 이전
개인 메서드와 필드에 액세스하려면 PrivateObject
클래스를 사용하세요.
<code class="language-csharp">PrivateObject target = new PrivateObject(new TypeA()); var retVal = target.Invoke("MyFunc");</code>
.NET Core 2.0 이상
PrivateObject
클래스는 더 이상 지원되지 않습니다. 대안은 테스트 목적으로 개인 메서드를 internal
으로 설정하거나 개인 메서드를 테스트할 필요가 없도록 코드를 리팩토링하는 것입니다.
위 내용은 런타임 오류를 방지하면서 C#에서 비공개 메서드를 효과적으로 단위 테스트하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!