gpt4 book ai didi

c# - C# 中的单元测试私有(private)方法

转载 作者:IT王子 更新时间:2023-10-29 03:28:54 26 4
gpt4 key购买 nike

Visual Studio 允许通过自动生成的访问器类对私有(private)方法进行单元测试。我已经编写了一个编译成功的私有(private)方法测试,但在运行时失败了。代码和测试的一个相当小的版本是:

//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 类型,因此列表添加失败。

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

最佳答案

您可以使用 PrivateObject类:

Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(expectedVal, retVal);

注意:PrivateObjectPrivateType 不适用于针对 netcoreapp2.0 的项目 - GitHub Issue 366

关于c# - C# 中的单元测试私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com