C# 在C中测试类型安全枚举模式#

C# 在C中测试类型安全枚举模式#,c#,unit-testing,design-patterns,testing,nunit,C#,Unit Testing,Design Patterns,Testing,Nunit,我正在使用“类型安全枚举模式” 出于测试目的,我需要创建一个无效的级别,这是我对反射所做的 int id = -1; string value = "invalid"; var constructor = typeof(Level).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] {typeof(int), typeof(string)}, null); var invalidLeve

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

出于测试目的,我需要创建一个无效的级别,这是我对反射所做的

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});
使用反射来访问私有构造函数似乎。。。。我错了。是否有更好的方法来创建无效级别

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

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

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

对于任何接收到
级别
的代码,您可能希望测试的一个路径是,它适当地处理空值(例如,通过抛出
ArgumentNullException

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

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

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


对于任何接收到
级别的代码,您可能确实希望测试的一个路径是它适当地处理空值(例如,通过抛出
ArgumentNullException
)。

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

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

我真的不明白为什么要使用反射验证无效的
级别
?我觉得这太过分了。如果你完全控制了这个库(即它不在其他地方使用),这是永远不会发生的,除非你自己去做。如果没有,库的用户知道使用私有构造函数创建对象超出了库的范围我真的不明白为什么要使用反射验证无效的
级别
?我觉得这太过分了。如果你完全控制了这个库(即它不在其他地方使用),这是永远不会发生的,除非你自己去做。如果没有,库的用户就会知道,使用私有构造函数创建对象超出了库的范围。不幸的是,有一个模型使用Level作为字段。该模型以我无法控制的方式从数据库映射。它刚刚发生在映射创建的地方。。。。一个空的。是的,你成功了。和鸭子说话。谢谢不幸的是,有一个模型使用Level作为字段。该模型以我无法控制的方式从数据库映射。它刚刚发生在映射创建的地方。。。。一个空的。是的,你成功了。和鸭子说话。谢谢你可能还想写一两个测试。最好是想知道为什么一个属性没有设置,或者其他一些愚蠢的错误。你可能仍然想写一两个测试。最好是想知道为什么一个属性没有设置或其他一些愚蠢的错误。
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});