2012-07-13 1 views
2

Je les interfaces suivantes:Comment se moquer d'une interface renvoyée en tant que propriété d'un autre simulacre?

interface IManufacturing 
{ 
    IJobApi JobApi {get;} 
} 

interface IJobApi 
{ 
    IList<JobSpec> GetSpecs (string wo, string name); 
} 

J'ai une classe qui utilise IManufacturing et appelle GetSpecs() comme ceci:

var specs = _manufacturing.JobApi.GetSpecs (wo, name); 

je configurer mes simulacres comme:

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

Lors de l'exécution du test, je vois seulement la chaîne "JobAPI appelée" dans la sortie. Ainsi, le GetSpecs() ne se moque pas et en effet l'appelant jette parce qu'il attendait une liste de spécifications alors qu'il recevait une chaîne vide ...

Quel pourrait être le coupable ici?

Merci.

Répondre

3

Dammit!

Vous allez rire, j'ai!

se sont avérés que la ligne suivante

A.CallTo (() => jobApi.GetSpecs (It.IsAny<string>(), It.IsAny<string>())) 

n'a pas été correct pour FakeItEasy. Il devrait être écrit comme

A.CallTo (() => jobApi.GetSpecs (A<string>.Ignored, A<string>.Ignored)) 

Ainsi, vous pouvez vous demander pourquoi il a compilé et exécuté ... Ouais moi aussi. ;)

It.IsAny est pour MOQ()

J'ai eu une aide Moq persistante au sommet de la classe!. (Je suis en train de passer à fakeiteasy de moq).

[paume visage]

TGIF

+0

+1 pour l'honnêteté. Je pense que les gens peuvent encore apprendre de choses comme ça. –

Questions connexes