是否可以训练Rhinomocks进行任意输入?

时间:2011-09-27 17:21:45

标签: c# unit-testing mocking rhino-mocks

我正在尝试为使用拼写纠正器的代码设置单元测试。我有正确的依赖注入代码,所以在Rhinomocks中设置存根不是问题,但是我为测试创建的文本块长50个字,我真的不会有50行代码看起来像这样:

spellingCorrector.Stub(x => x.CorrectWord("the")).Return("the");
spellingCorrector.Stub(x => x.CorrectWord("boy")).Return("boy");
spellingCorrector.Stub(x => x.CorrectWord("ran")).Return("ran");

出于单元测试的目的,我认为假设单词拼写正确是可以的。有没有办法让Rhinomocks简单地遵循一个关于返回的规则,以及:

的效果
spellingCorrector.Stub(x => x.CorrectWord(y)).Return(y);

3 个答案:

答案 0 :(得分:3)

您可以使用IgnoreArguments()方法:

spellingCorrector
    .Stub(x => x.CorrectWord(null))
    .IgnoreArguments()
    .Return(y);

这种方式无论传递给CorrectWord方法的值是什么,它都会返回y


更新:

在您的评论之后,它更加明确:

Func<string, string> captureArg = arg => arg;
spellingCorrector.Stub(x => x.CorrectWord(null)).IgnoreArguments().Do(captureArg);

这将使用作为参数传递的任何值作为返回值。如果需要对此返回值执行某些转换,请调整captureArg委托。

答案 1 :(得分:0)

对于像这样复杂的事情,不要使用RhinoMocks,而是编写自己的小存根类。我用一本应该纠正的所有单词的词典来支持它,如果它不在词典中,则返回单词。

只有创建模拟才能使这种事情变得更容易。如果使用模拟不容易(或更重要,更可读),只需编写代码。

答案 2 :(得分:0)

如果你不是特别依赖Rhinomock,你可以使用Moq

spellingCorrector.Setup(x => x.CorrectWord(It.IsAny<string>()))
    .Returns(x => x);