Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何模拟作为属性从另一个模拟返回的接口?_C#_Mocking_Fakeiteasy - Fatal编程技术网

C# 如何模拟作为属性从另一个模拟返回的接口?

C# 如何模拟作为属性从另一个模拟返回的接口?,c#,mocking,fakeiteasy,C#,Mocking,Fakeiteasy,我有以下接口: interface IManufacturing { IJobApi JobApi {get;} } interface IJobApi { IList<JobSpec> GetSpecs (string wo, string name); } 我将模拟设置为: var jobApi = A.Fake<IJobApi> (); A.CallTo (() => jobApi.GetSpecs (It.IsAny<string&

我有以下接口:

interface IManufacturing
{
    IJobApi JobApi {get;}
}

interface IJobApi
{
    IList<JobSpec> GetSpecs (string wo, string 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);
var jobApi=A.Fake(); A.CallTo(()=>jobApi.GetSpecs(It.IsAny(),It.IsAny()) .Invokes(()=>System.Diagnostics.Trace.WriteLine(“GetSpecs called!”) .返回(新列表) { 新作业规范(“blabla”、“0.125”、“某物”) }); var manufacturing=A.Fake(); A.CallTo(()=>manufacturing.JobAPI) .Invokes(()=>System.Diagnostics.Trace.WriteLine(“调用了JobAPI!”) 。报税表(jobApi); 在运行测试时,我只在输出中看到“JobAPI called”字符串。 因此,GetSpecs()不会被模拟,实际上调用方会抛出,因为它需要一个规范列表,而它收到的是一个空字符串

罪魁祸首可能是什么

谢谢。

该死

你会笑的,我笑了

原来是下面这行

A.CallTo (() => jobApi.GetSpecs (It.IsAny<string> (), It.IsAny<string> ()))
A.CallTo(()=>jobApi.GetSpecs(It.IsAny(),It.IsAny())
这不适合作假。它应该写为

A.CallTo (() => jobApi.GetSpecs (A<string>.Ignored, A<string>.Ignored))
A.CallTo(()=>jobApi.GetSpecs(A.Ignored,A.Ignored))
所以,你可能想知道为什么它会编译并运行。。。是的,我也是

它。我的名字是Moq(!)

我在班上的第一名就有一个使用最小起订量的问题。(我正在从moq转向Fakeetisy)

[掌心]


TGIF

+1表示诚实。我认为人们仍然可以从这样的事情中学习。
A.CallTo (() => jobApi.GetSpecs (A<string>.Ignored, A<string>.Ignored))