gpt4 book ai didi

unit-testing - MOQ - 如何模拟需要转换为另一个接口(interface)的接口(interface)?

转载 作者:行者123 更新时间:2023-12-03 05:30:42 24 4
gpt4 key购买 nike

我想要做的是为 I1 构造一个起订量 - 这很好......但是在我正在测试使用此模拟的方法过程中,我需要将其转换为 I2 以便访问一些属性不在 I1 上

Interface I1 
{ int AProperty{get;set;}}

Interface I2
{int AnotherProperty{get;set;}}

然后我有一些对象

Class O1 : I1 {}

Class O2 : O1 , I2 {}

问题是,当我有 I2 实现对象的实例时,我可以将其强制转换为 I1,以便访问通过该接口(interface)实现的方法。在代码中这不是问题,一切都按预期工作。

唯一的问题是在该类上编写单元测试时出现的。

这些接口(interface)还公开了一个名为 GetNewInstance 的方法,该方法返回转换为 IGetNewInstance 接口(interface)的实现对象的初始化实例...我通常可以很好地模拟它并使其返回自身(因此我继续使用模拟对象)。

但是,当您尝试将返回的 I2 类型对象转换为 I1 时,会产生空引用结果 - 这是有道理的,因为实现 I2 的模拟对象不会从任何继承 I1 的对象继承。

问题是我如何强制模拟对象同时继承 I1 和 I2?

最佳答案

据我了解,您想要创建一个实现两个接口(interface)的模拟。使用起订量,就这么简单:

var mock = new Mock<IFoo>(); // Creates a mock from IFoo
mock.As<IBar>(); // Adds IBar to the mock
mock.As<IBar>().Setup(m => m.BarMethod()).Returns(new object()); // For setups.

现在,您可以设置期望并使用模拟,就像通常使用同时实现 IFooIBar 的对象一样。

对于您的 GetNewInstance 方法,您只需设置一个返回模拟本身的期望即可。

关于unit-testing - MOQ - 如何模拟需要转换为另一个接口(interface)的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3503974/

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