在C#中对私有方法进行单元测试

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]'.

根据智能感知-因此我猜编译器-目标是TypeA_Accessor类型。但是在运行时,它的类型为TypeA,因此列表添加失败。

有什么办法可以阻止此错误?或者,更可能的是,其他人还有什么其他建议(我预测也许“不要测试私有方法”和“不要让单元测试操纵对象的状态”)。

回答:

是的,不要测试私有方法。…单元测试的想法是通过其公共“ API”测试单元。

如果发现需要测试许多私有行为,则很可能在要测试的类中隐藏了一个新的“类”,将其提取并通过其公共接口对其进行测试。

一个建议/思考工具.....有一种想法认为任何方法都不应该是私有的。意味着所有方法都应该存在于对象的公共接口上……如果您认为需要将其设为私有,则很可能存在于另一个对象上。

这条建议在实践中还没有完全解决,但它主要是很好的建议,通常会促使人们将其对象分解为较小的对象。

以上是 在C#中对私有方法进行单元测试 的全部内容, 来源链接: utcz.com/qa/422170.html

回到顶部