我有以下界面:

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 named”字符串。
因此,GetSpecs()不会被嘲笑,并且实际上调用者会抛出该异常,因为它希望获得规范列表,而接收到一个空字符串...

这里的罪魁祸首是什么?

谢谢。

最佳答案

该死!

你会笑,我有!

原来那行

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


对于FakeItEasy不正确。它应该写成

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


因此,您可能想知道为什么它会编译并运行...是的,我也是。 ;)

它是Moq(!)

我在课堂上挥之不去的使用Moq。 (我正在从起订量转换为fakeiteasy)。

[脸掌]

TGIF

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

10-12 00:28
查看更多