2016-05-25 14 views
5

Bu, mümkün olan bir şey olmayabilir ama yine de sormam gerektiğini düşündüm. Yine de, bu yöntemi kullanmam için ikinci aramanın da test ettiğim yöntemde sağlanan parametreyi kullanarak dışarıda bırakılması için var mı?C# İkinci sesli aramada sabit kodlanmış parametreli stubmethod alayları

yöntem saplama:

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

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

için.Mevcut testi:

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

ve supportDetails testte kullanılan nesne:

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

Sadece başka bir çağrı ekleyebilirsiniz, yani '_repo.Stub (s => s.FindSupportDetails (" en-us "))) Geri dön (supportDetails.Where (sd => sd.LanguageKey ==" en- ""). SingleOrDefault()); – stuartd

+0

Bu, ilk saplamanın üzerine yazılmayacak mı? –

+0

Geçilen parametre farklı olduğu için ben inanmıyorum. Gerçi Rhino'yu kullanmamdan beri bir süre oldu. Aksi takdirde [tekrarlama sözdizimi] kullanın (http://www.richard-banks.org/2010/07/mocking-comparison-part-6-multiple.html) – stuartd

cevap

4

doğru ve en muhtemel çözüm Sorununuz için Do yöntemini kullanmaktır:

olursa olsun FindSupportDetails geçirilen ne argüman yükseltecektir
_repo.Stub(s => s.FindSupportDetails(null)) 
    .IgnoreArguments() 
    .Do((Func<string, SupportDetails>) 
     (langKey => supportDetails.SingleOrDefault(sd => sd.LanguageKey == langKey))); 

, sonra doğru SupportDetails seçecektir.