Visual Studio에서는 자동으로 생성 된 접근 자 클래스를 통해 개인 메서드의 단위 테스트를 수행 할 수 있습니다. 성공적으로 컴파일하는 개인용 메소드의 테스트를 작성했지만 런타임에 실패합니다. 코드와 테스트의 버전은 다음과 같습니다.
//in project MyProj
class TypeA
{
private List<TypeB> myList = new List<TypeB>();
private class TypeB
{
public TypeB()
{
}
}
public TypeA()
{
}
private void MyFunc()
{
//processing of myList that changes state of instance
}
}
//in project TestMyProj
public void MyFuncTest()
{
TypeA_Accessor target = new TypeA_Accessor();
//following line is the one that throws exception
target.myList.Add(new TypeA_Accessor.TypeB());
target.MyFunc();
//check changed state of target
}
런타임 오류는 다음과 같습니다.
Object of type System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' cannot be converted to type 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]'.
intellisense에 따르면 컴파일러가 TypeA_Accessor 유형이라고 생각합니다. 그러나 런타임시 유형은 TypeA이므로 목록 추가에 실패합니다.
이 오류를 막을 수있는 방법이 있습니까? 또는 다른 사람들이 할 수있는 다른 조언 (아마도 "비공개 방법을 테스트하지 않음"및 "객체 상태를 조작하는 단위 테스트가 없음")이있을 수 있습니다.