2010-11-03 57 views
2

这可以做到吗?下面是我测试的方法:如何对包含静态方法的方法进行单元测试?

public void SaveAvatarToFileSystem() 
{ 
    Directory.CreateDirectory(AvatarDirectory); 
    _file.SaveAs(FormattedFileName); 
} 

在我的单元测试,我使用Rhino.Mocks,我想验证_file.SaveAs()被调用。我嘲笑了_file(这是一个HttpPostedFileBase对象)并将其注入到此方法的类构造函数中。我想运行这个单元测试,但实际上没有创建Directory.CreateDirectory调用。这可能吗?

+5

[嘲弄使用Rhino.Mocks的静态方法]的可能重复(http://stackoverflow.com/questions/540239/mocking-static-methods-using-rhino-mocks) – 2010-11-03 18:54:55

回答

2

它不可能嘲讽使用Rhino Mocks的静态方法。我会做的是隔离类中的“受保护的内部虚拟”方法中的静态方法。然后你可以模拟“正在测试的类”并嘲笑“CreateAvatarDirectory”方法。然后调用“SaveAvatarToFileSystem”方法并验证该代码是否称为模拟的“CreateAvatarDirectory”方法。

它是一个非常方便的技巧,它可以让你隔离被测试的类中的方法,并声明它们被同一类中的其他方法调用。希望有所帮助!

public void SaveAvatarToFileSystem() 
{ 
    CreateAvatarDirectory(); 
    _file.SaveAs(FormattedFileName); 
} 

protected internal virtual void CreateAvatarDirectory() 
{ 
    Directory.CreateDirectory(AvatarDirectory); 
} 
0

你可以写或使用静态类的现有包装(在上面也许System.IO.Abstractions帮助的情况下)。

相关问题