【问题标题】:Return a fake value from external DLL using C#使用 C# 从外部 DLL 返回一个假值
【发布时间】:2015-02-13 13:04:15
【问题描述】:

我们正在研究用 C# 开发的三层架构(UI - Library1 - Library2 -> 硬件),但我想测试我已经实现的代码library1,但问题是我们无法访问硬件(各种原因)但我们可以访问library2

我的问题是我能否从 library2 返回一个假值,例如是否实现了该功能以测试硬件连接,以及我们何时调用 library2 函数返回 true 或从 library1 访问的任何相关默认返回参数?

我正在使用 VS2010。

【问题讨论】:

  • 你会想看看模拟。作为一般规则,您应该尽量不要进行任何依赖于硬件、数据等的外部调用...
  • @gmiley Mocking ?,对不起,我对所有这些事情都是新手,请您帮助我提供链接或方法来指导我完成它。几个例子可能会有所帮助

标签: c# visual-studio-2010 testing automation


【解决方案1】:

您可以通过 google 搜索找到很多示例:C# Mocking。我倾向于编写自己的模拟类并实现一个 ObjectFactory,我可以使用它来专门实例化测试中的模拟类,否则默认为真实类。

例如:如果我想使用 System.Net.WebRequest,我将首先创建我的通用接口 - IWebRequest,它公开 .Timeout、.UploadString 以及我可能在我的应用程序中使用的任何其他接口。

然后我将使用该接口创建我的实现类。在 .UploadString 的实现中,我将创建一个真正的 System.Net.WebRequest 类的实例并调用它的 .UploadString。

在模拟类中,使用 IWebRequest 接口实现它,就像真正的包装类一样,但是当您实现 .UploadString 方法时,只是让它返回一个硬编码的响应。您可以将这些模拟类放在它们自己的“模拟”库中,该库仅包含在您的测试项目中。

要让这一切运行,您需要您的 ObjectFactory,它包含在您的常规代码项目和单元测试项目中。您将拥有带有接口 (IWebRequest) 的返回类型的静态函数,用于检查是否已手动指定类。如果没有,则返回默认“真实”实现的实例。

在您的测试中,您将访问 ObjectFactory 并手动设置您要使用特定的模拟类,并且当您的真实代码运行时,它会实例化该模拟类而不是您的真实类。

请记住,就像我说的那样,那里有很多示例,甚至可以使用模拟框架的完整实现。去谷歌看看吧。

【讨论】:

    【解决方案2】:

    虽然有许多不同的框架可以提供这个功能,但我还是建议坚持使用内置的 VS.net 框架,如此处所述。 http://msdn.microsoft.com/en-us/library/hh549175.aspx

    【讨论】:

    • 这对 VS2012 及更高版本很有用,但我一直在寻找 VS2010。无论如何感谢您的回复。
    • 感谢您的回答,但是:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2014-12-04
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多