我正在尝试为使用拼写纠正器的代码设置单元测试。我有正确的依赖注入代码,所以在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);
答案 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);