代码改变世界

TDD: 测试静态方法

2013-07-17 11:05  Spring.Guo  阅读(486)  评论(0编辑  收藏  举报

对于静态方法,mock框架大多不支持测试。所以需要修改代码,以便调用的静态方法可测试。

1  一个静态方法类:

public class MyHelper
{
public static string GetHelp()
{
return "This is help";
}
}

 

2 使用该静态方法的调用类,

public class MyManager
{
public bool IsManaged { get; set; }
public void Manage()
{
string help = MyHelper.GetHelp();
IsManaged = (!string.IsNullOrEmpty(help));
}
}

 

3  修改2的代码,模拟2中粗体代码部分

public class MyManager
{
public bool IsManaged { get; set; }
public void Manage()
{
string help = GetHelp();
IsManaged = (!string.IsNullOrEmpty(help));
}

protected virtual string GetHelp()
{
return MyHelper.GetHelp();
}
}
4 在测试框架代码中创建一个Stu类,来模拟
public class MyManagerStub:MyManager
{
protected override string GetHelp()
{
return "this is help from stub";
}
}
 
5 现在可以通过测试Stu类来间接测试实际的代码了
public void TestMe()
{
MyManagerStub manager = new MyManagerStub();
manager.Manage();
Assert.AreEqual(true, manager.IsManaged);
}