【发布时间】:2016-05-25 15:28:46
【问题描述】:
这可能是不可能的,但我想我还是会问。无论如何,我是否可以将这个方法存根,以便使用我正在测试的方法中提供的参数也将第二个调用存根?
存根方法:
public SupportDetails GetSupportDetails(string languageKey)
{
var result = FindSupportDetails(languageKey);
return result ?? FindSupportDetails("en-us");
}
我目前的测试:
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);
}
以及测试中使用的supportDetails对象:
supportDetails = new SupportDetails[]
{
new SupportDetails()
{
ContactSupportDetailsID = 1,
LanguageKey = "en-us"
},
new SupportDetails()
{
ContactSupportDetailsID = 2,
LanguageKey = "en-gb"
},
new SupportDetails()
{
ContactSupportDetailsID = 3,
LanguageKey = "es-es"
}
};
【问题讨论】:
-
我想你可以再添加一个电话,即
_repo.Stub(s => s.FindSupportDetails("en-us")).Return(supportDetails.Where(sd => sd.LanguageKey == "en-us").SingleOrDefault()); -
不会覆盖第一个存根吗?
-
我不相信,因为传递的参数不同。不过,自从我使用 Rhino 以来已经有一段时间了。否则使用the repeat syntax
-
它似乎工作,所以谢谢。我真的不明白它是如何知道调用哪个存根的,因为签名是相同的
-
@stuartd 是对的,rhinomocks 不会覆盖常规设置,但是处理您的情况的正确方法是使用
Do方法。
标签: c# .net unit-testing mocking rhino-mocks