1

我正在使用“类型安全枚举模式”

public class Level
{
    public static readonly Level Low = new Level(0, "Low");
    public static readonly Level Medium = new Level(1, "Medium");
    public static readonly Level High = new Level(2, "High");

    private int _value;
    private string name;

    private Level(int value, string name)
    {
        _value=value;
        _name=name;
    }
}

出于测试目的,我需要创建一个无效的关卡,我用反射来做。

int id = -1;
string value = "invalid";
var constructor = typeof(Level).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] {typeof(int), typeof(string)}, null);
var invalidLevel = (Level)constructor.Invoke(new object[] {id, value});

使用反射访问私有构造函数似乎....对我来说是错误的。有没有更好的方法来制作无效级别?

4

2 回答 2

8

出于测试目的,我需要创建一个无效级别

为什么?这里枚举模式的要点是阻止那里成为无效级别。

试图测试这个被破坏就像试图通过使用错误数量的参数的反射调用它来测试一个方法是否是类型安全的。基本上,您不应该尝试测试这条路径 IMO。

您可能确实想要测试任何接收 a 的代码的一条路径Level是它适当地处理空值(例如通过 throwing ArgumentNullException)。

于 2013-07-09T13:00:40.223 回答
0

单元测试是关于测试一个类的公共方法/属性(即行使公共API)。只要您的班级不公开公共ctor,您就不需要为此进行测试。

于 2013-07-09T13:05:08.743 回答