【问题标题】:C# Rhino mocks stubmethod with hard coded parameter in second callC# Rhino 在第二次调用中使用硬编码参数模拟 stubmethod
【发布时间】: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


【解决方案1】:

解决您的问题的正确和最优雅的解决方案是使用Do 方法:

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

无论将什么参数传递给FindSupportDetailsFunc 都会引发,然后选择正确的SupportDetails

【讨论】:

    猜你喜欢
    • 2018-08-31
    • 2012-07-31
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    相关资源
    最近更新 更多