gpt4 book ai didi

c# - 是否有一种标准方法可以对依赖项不实现接口(interface)的代码进行单元测试?

转载 作者:行者123 更新时间:2023-11-30 13:58:28 24 4
gpt4 key购买 nike

是否有一种标准方法可以对依赖项不实现接口(interface)的代码进行单元测试?例如,System.Net.Http 命名空间仅公开具体类。如果我正在尝试对依赖于 System.Net.Http 中具体类之一的类进行单元测试,我是否应该只构造一个实例,比如 HttpRequestMessage ,设置它的属性,然后将这个新构造的对象提供给被测系统?子类化 HttpRequestMessage 并让它实现一个自定义接口(interface),然后可以模拟/ stub 是否有意义?

最佳答案

推荐的做法是将此对象包装在您创建的类中,该类本身实现了一个接口(interface)。然后您可以在代码中使用这个包装器类,然后您可以提供这个包装器的模拟版本来代替真实的类​​。您不会使用此方法对其进行子类化,而是包含它并使用委托(delegate)(不要与委托(delegate)混淆!)来转发每个方法。

例如,您可以创建一个继承自 IHttpRequestMessage 的 HttpRequestMessageWrapper 类(您定义的类,包括 HttpRequestMessage 的所有公共(public)属性......尽管您可能只实现您使用的属性)。

或者,您可以使用支持 shim 的测试框架,该框架本质上为您完成此包装,并用 shim 版本替换对对象的调用。 Microsoft Fakes(在 VS 2012 MS 测试中引入)就是这样做的。

垫片通常用于替换常见的框架调用,例如 DateTime.Now,因此您可以在测试期间提供特定值。

关于c# - 是否有一种标准方法可以对依赖项不实现接口(interface)的代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16783282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com