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)和编译器的提示,target是TypeA_Accessor类型。但在运行时,它是TypeA类型,因此列表添加操作失败。有没有办法可以避免这个错误?或者更可能的是,其他人有什么建议(我预测可能会有“不要测试私有方法”和“不要让单元测试操纵对象状态”的建议)。