gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:21:43 26 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 每个类属性的值。

希望这有帮助。

可能相关的链接:

关于nsubstitute - 我可以让 NSubstitute 自动模拟我的具体类(class)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64937472/

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