SNA*_*SNA 20 .net c# unit-testing
场景.语言C#,使用VS2008单元测试框架进行单元测试
我有一个带静态构造函数的静态类和2个方法.我编写了4种测试方法来测试整个类.我的静态构造函数有一些重要的初始化.
现在,如果我串联运行所有4个单元测试用例,则只在开始时调用静态构造函数.在每个测试用例结束时,没有这样的事情
称为静态析构函数,因此构造函数中的状态信息也会被传递到下一个单元测试用例.解决方法是什么?
rob*_*rob 40
Type staticType = typeof(StaticClassName);
ConstructorInfo ci = staticType.TypeInitializer;
object[] parameters = new object[0];
ci.Invoke(null, parameters);
Run Code Online (Sandbox Code Playgroud)
来自http://colinmackay.scot/2007/06/16/unit-testing-a-static-class/
And*_*erd 12
最简单的解决方案是向静态类添加"重置"方法,该方法具有破坏它并重构它的等效行为.
您可能有充分的理由在这里使用静态类.但是,由于静力学不能很好地与单元测试相结合,我通常会寻找替代设计.
我会将初始化从静态构造函数移动到构造函数调用的方法.通过将此方法设置为内部,您可以从测试中调用此方法以重新初始化该类.
public static class MyClass
{
public static MyClass()
{
initialize();
}
internal static void initialize()
{
// Do initialization (and cleanup if necessary)
}
public static void Method1() {}
public static void Method2() {}
}
Run Code Online (Sandbox Code Playgroud)
要调用内部方法,您需要使用InternalsVisibleTo属性,如本博客中所述.
您也可以将其设为私有,但之后您需要使用反射来调用它.
但正如Andrew Shepherd所说,你还应该检查静态类是否是这个类的最佳设计.
| 归档时间: |
|
| 查看次数: |
18046 次 |
| 最近记录: |