有可能训练Rhinomocks进行任意输入吗?
本文关键字:任意 输入 Rhinomocks 有可能 | 更新日期: 2023-09-27 18:09:44
我正在尝试为一段使用拼写校正器的代码设置单元测试。我已经正确地注入了代码依赖项,所以在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);
您可以使用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
委托。
对于像这样复杂的东西,不要使用RhinoMocks,而是编写自己的小存根类。我会用一个包含所有应该纠正的单词的字典来支持它,如果字典中没有这个单词,就返回它。
创建mock只是为了使这种事情更容易。如果使用mock不容易(或者更重要的是,不容易读),那么就编写代码。
如果您不是特别喜欢Rhinomock,您可以使用Moq:
spellingCorrector.Setup(x => x.CorrectWord(It.IsAny<string>()))
.Returns(x => x);