我有以下界面:
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()不会被模拟,实际上调用者抛出,因为它期望一个规范列表,而它收到一个空字符串......
这可能是罪魁祸首?
感谢。
答案 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