gpt4 book ai didi

c# - 如何模拟从另一个模拟作为属性返回的接口(interface)?

转载 作者:行者123 更新时间:2023-11-30 22:27:03 25 4
gpt4 key购买 nike

我有以下接口(interface):

interface IManufacturing
{
IJobApi JobApi {get;}
}

interface IJobApi
{
IList<JobSpec> GetSpecs (string wo, string name);
}

我有一个使用 IManufacturing 并像这样调用 GetSpecs() 的类:

var specs = _manufacturing.JobApi.GetSpecs (wo, name);

我设置我的模拟如下:

var jobApi = A.Fake<IJobApi> ();
A.CallTo (() => jobApi.GetSpecs (It.IsAny<string> (), It.IsAny<string> ()))
.Invokes (() => System.Diagnostics.Trace.WriteLine("GetSpecs called!"))
.Returns (new List<JobSpec>
{
new JobSpec("blablabla", "0.125", "something")
});

var manufacturing = A.Fake<IManufacturing> ();
A.CallTo (() => manufacturing.JobAPI)
.Invokes (() => System.Diagnostics.Trace.WriteLine ("JobAPI called!"))
.Returns (jobApi);

运行测试后,我只在输出中看到“JobAPI called”字符串。因此,GetSpecs() 不会被 mock ,实际上调用者会抛出异常,因为它需要一个规范列表,而它却收到一个空字符串...

这里的罪魁祸首是什么?

谢谢。

最佳答案

该死!

你会笑的,我有!

原来是下面这行

A.CallTo (() => jobApi.GetSpecs (It.IsAny<string> (), It.IsAny<string> ()))

对于 FakeItEasy 是不正确的。应该写成

A.CallTo (() => jobApi.GetSpecs (A<string>.Ignored, A<string>.Ignored))

所以,您可能想知道为什么它编译并运行了……是的,我也是。 ;)

It.IsAny 用于最小起订量 (!)

我有一个使用最小起订量在类(class)中名列前茅。 (我正在从最小起订量切换到 fakeiteasy)。

[脸掌]

动图

关于c# - 如何模拟从另一个模拟作为属性返回的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475774/

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