2012-07-13 47 views
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()不會被模擬,而且調用者會拋出,因爲它預期了一個規格列表,而它收到一個空字符串...

這裏有什麼可能是罪魁禍首?

謝謝。

回答

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

[臉棕櫚]

TGIF

+0

1誠實。我認爲人們仍然可以從這樣的事情中學習。 – 2012-12-27 14:55:09