我们正在开发用C#开发的三层架构(UI - Library1 - Library2 - >硬件),但我想测试我已经实现的代码在 library1 中,但问题是我们无法访问硬件(各种原因),但我们可以访问 library2 。
我的问题是我可以从library2返回一个假值,就好像实现了功能来测试硬件连接,以及何时调用library2函数返回true或从library1访问的任何相关默认返回参数?
我正在使用VS2010。
答案 0 :(得分:2)
您可以通过Google搜索找到很多示例:C#Mocking。我倾向于编写自己的模拟类并实现一个ObjectFactory,我可以用它来在测试中专门实例化mock类,但是默认为真正的类。
例如:如果我想使用System.Net.WebRequest,我首先要创建我的公共接口 - 暴露.Timeout,.UploadString以及我可能在我的应用程序中使用的任何其他接口的IWebRequest。
然后我将使用该接口创建我的实现类。在.UploadString的实现中,我将创建一个真实的System.Net.WebRequest类的实例并调用它的.UploadString。
在mock类中,使用IWebRequest接口实现它,就像真正的包装器类一样,但是当你实现.UploadString方法时,只需让它返回一个硬编码的响应。您可以将这些模拟类放在他们自己的“Mocks”库中,该库只包含在您的测试项目中。
要完成所有这些操作,您将需要包含在常规代码项目和单元测试项目中的ObjectFactory。您将拥有带有接口返回类型(IWebRequest)的静态函数,用于检查是否已手动指定类。如果没有,则返回默认“真实”实现的实例。
在您的测试中,您将访问ObjectFactory并手动设置您要使用特定的模拟类,当您的实际代码运行时,它实例化而不是您的真实类。
请记住,就像我说的那样,有很多例子,甚至可以使用的模拟框架的完整实现。只需看看谷歌。
答案 1 :(得分:0)
虽然提供此功能有许多不同的框架,但我建议只使用内置的VS.net框架,如此处所述。 http://msdn.microsoft.com/en-us/library/hh549175.aspx