在 C# 中测试/注入私有字段的好做法是什么

Hat*_*oft 3 c# tdd unit-testing code-coverage

如果这是重复的,我很抱歉。我被赋予了为该方法添加一些覆盖范围的任务,并被告知要模拟私有List<string>财产。我的问题是:有没有办法测试私有字段?

我找到的解决方案是添加新的构造函数只是为了注入这个私有列表。我不确定这是否是正确的方法,所以任何帮助将不胜感激。

public class Class1
{
    public Class1(List<string> list)//This is just for Unit Testing 
    {
        list1 = list;
    }


    private readonly InjectRepository _repository;
    //
    public Class1(InjectRepository repository)//This is the actual constructor
    {
        _repository = repository;
    }

    private List<string> list1 = new List<string>();

    public void Do_Complex_Logic()
    {
       //list1 will be set with items in it
       //Now list1 is passed to some other instance
    }
}
Run Code Online (Sandbox Code Playgroud)

wom*_*omp 5

类的私有逻辑应该在其行为的公共表达中可见。换句话说,理论上,根本不需要测试私有字段。

没有办法直接测试私有字段;毕竟他们是私人的。如果您真的认为需要测试私有字段,那么我建议将其设为内部,并通过[InternalsVisibleTo]属性将其公开给您的单元测试程序集。

话虽如此,有些框架允许这样的事情,比如TypeMock