如何模拟从另一个模拟器返回的属性?

时间:2012-07-13 17:55:48

标签: c# mocking fakeiteasy

我有以下界面:

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()不会被模拟,实际上调用者抛出,因为它期望一个规范列表,而它收到一个空字符串......

这可能是罪魁祸首?

感谢。

1 个答案:

答案 0 :(得分:3)

该死!

你会笑,我有!

原来是以下一行

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

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

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

所以,你可能想知道它为什么编译和运行......也许我也是。 ;)

It.IsAny适用于Moq(!)

我有一个使用Moq在课堂上挥之不去。 (我正在从moq转换到fakeiteasy)。

[面掌]

TGIF