2011-10-05 32 views

回答

2

理想的情况下,消息框被设置为一个依赖,以便它可以被嘲笑/存根/单元测试过程中伪造的,是这样的:

public interface IMessageBox 
{ 
    Show(...); 
} 

当然,你将需要实现的接口在你的MessageBox包装类中。更多关于DI的信息:http://en.wikipedia.org/wiki/Dependency_injection

如果现在不可能用这种方法重新设计您的应用程序,您可以尝试this approach

+0

+1,但是请不要走Windows钩子方法。如果你有遗留代码,你不能重构,但想测试,看看Typemock。 – TrueWill

0

理想情况下,您的测试将测试您的业务逻辑。我通常将MessageBox视为UI组件而不是UI。这需要修改程序流程,以便错误/例外/验证独立于用户通知发生。 IE依靠IDataErrorInfo而不是属性集上的异常。

如果你无法避免它,并且不想走包装消息框和使用模拟DI的路线,我已经使用了在我的应用程序中设置一个Public Shared Property RunSilent As Boolean = False单例变量的技术,以指示应用程序应该运行沉默,然后在调用该消息框之前检查该属性,以便仅在未运行沉默时才显示该框。然后在我的单元测试设置中,将silent标志设置为true。不理想,但有效。