2016-05-25 63 views
5

Questo potrebbe non essere possibile, ma ho pensato di chiedere comunque. Devo comunque escludere questo metodo in modo che anche la seconda chiamata venga cancellata usando il parametro fornito nel metodo che sto testando?C# Rhino deride lo stubmetode con parametro hard coded in seconda chiamata

Il metodo per stub:

public SupportDetails GetSupportDetails(string languageKey) 
{ 
    var result = FindSupportDetails(languageKey); 

    return result ?? FindSupportDetails("en-us"); 
} 

La mia prova attuale:

public void GetsUSDetails_IfLangKeyDoesNotExist() 
{ 
    var langKey = "it-it"; 

    _repo.Stub(s => s.FindSupportDetails(langKey)) 
     .Return(supportDetails.Where(sd => sd.LanguageKey == langKey) 
           .SingleOrDefault()); 

    ISupportRepository repo = _repo; 
    var actual = repo.GetSupportDetails(langKey); 

    Assert.AreEqual("en-us", actual.LanguageKey); 
} 

ei supportDetails oggetto utilizzato nel test:

supportDetails = new SupportDetails[] 
     { 
      new SupportDetails() 
      { 
       ContactSupportDetailsID = 1, 
       LanguageKey = "en-us" 
      }, 
      new SupportDetails() 
      { 
       ContactSupportDetailsID = 2, 
       LanguageKey = "en-gb" 
      }, 
      new SupportDetails() 
      { 
       ContactSupportDetailsID = 3, 
       LanguageKey = "es-es" 
      } 
     }; 
+0

Penso che sia possibile aggiungere un'altra chiamata, ad esempio '_repo.Stub (s => s.FindSupportDetails (" en-us ")). Return (supportDetails.Where (sd => sd.LanguageKey ==" en- us "). SingleOrDefault());' – stuartd

+0

Non sovrascriverà il primo stub? –

+0

Non ci credo, dato che il parametro passato è diverso. Sono passato un po 'da quando ho usato Rhino, però. Altrimenti usa [la sintassi ripetuta] (http://www.richard-banks.org/2010/07/mocking-comparison-part-6-multiple.html) – stuartd

risposta

4

la correttezza e la soluzione più elegante per il tuo problema è quello di utilizzare il metodo Do:

_repo.Stub(s => s.FindSupportDetails(null)) 
    .IgnoreArguments() 
    .Do((Func<string, SupportDetails>) 
     (langKey => supportDetails.SingleOrDefault(sd => sd.LanguageKey == langKey))); 

Il Func alzerà non importa quale argomento è stato passato a FindSupportDetails, quindi il corretto SupportDetails selezionerà.

Problemi correlati