gpt4 book ai didi

nsubstitute - 我可以让 NSubstitute 自动模拟我的具体类(class)吗?

转载 作者:行者123 更新时间:2023-12-04 01:07:18 24 4
gpt4 key购买 nike

我有一个用“NSubstitute”模拟的接口(interface),它包含返回 concreate 类的属性,即返回值不是接口(interface)。例如

public interface ISomething
{
SomeObj First { get; }
SomeObj Second { get; }
}

“SomeObj”具体类有一个默认构造函数,但“NSubstitute”总是为这些属性返回“null”。类本身不在我的控制之下,所以我不能简单地让它从接口(interface)派生。

'NSubstitute' 可以模拟这些类型的属性吗?或者有没有办法覆盖行为?否则我必须在测试之前手动初始化模拟,这可能是很多代码(即使它通过通用方法重用)。

也许我忽略了一个更简单的解决方案?

最佳答案

如果类具有默认(无参数)构造函数并且其所有成员都是虚拟的(参见 Auto and recursive mocks 简介中的注释),则类将被自动模拟。这样做的目的是减少潜在的不必要的(破坏性?)副作用,如果我们使用替代品并突然命中非虚拟的、未模拟的代码路径,该路径在我们认为是假的实例中做坏事。

NSubstitute 没有办法覆盖这种行为。相反,我建议通过您自己的工厂方法(例如,测试项目中的静态 Sub.For<T>(...) 方法)创建所有替代品,该方法使用 NSubstitute 生成替代品,然后应用您需要的所有特定初始化规则,例如使用反射为每个类属性 stub 值。

希望这可以帮助。

可能的相关链接:

  • 我建议尝试 avoid mocking types we don't own .
  • Stack Overflow: Is it recommended to mock concrete class?
  • Hacky factory method sample that subs properties using reflection .
  • 关于nsubstitute - 我可以让 NSubstitute 自动模拟我的具体类(class)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17182355/

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