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))