2

我有以下接口:

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

这里的罪魁祸首可能是什么?

谢谢。

4

1 回答 1

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 切换到 fakeiteasy)。

[脸掌]

动图

于 2012-07-13T18:44:18.657 回答