Dan*_*nor 2 c# unit-testing rhino-mocks mocking
我有以下课程:
public class Script
{
IPrinter _printer;
public Script(IPrinter printer)
{
_printer = printer;
}
public void Print(TextWriter writer)
{
_printer.PrintComment(writer, "lolz");
writer.WriteLine("omg this complicates things";
_printer.PrintSpecial(writer);
if (signoff)
_printer.PrintComment(writer, "kthxbye");
}
}
Run Code Online (Sandbox Code Playgroud)
如何设置测试以声明使用正确的参数以正确的顺序调用打印机方法?
我可以手动创建一个'假'打印机并对编写器进行状态测试,但由于上下文很大(特别是因为脚本也在与编写器一起使用),我想避免它.
我正在使用nunit和rhino模拟器.任何关于体系结构更改的想法或模拟程序,以使这更容易测试,这是值得赞赏的.不幸的是,我正在使用的真实代码更复杂 - 但这是要点.
你不能使用静态AAA语法来验证Rhino中的行为,你不得不回到旧式"重播"来做AFAIK.
我不是犀牛专家,我通常使用Moq,但我认为这是正确的:
var mocks = new MockRepository();
var printer = mocks.DynamicMock<IPrinter>();
using (mocks.Ordered())
{
printer.Expect(x => x.PrintComment());
printer.Expect(x => x.PrintSpecial());
printer.Expect(x => x.PrintComment());
}
printer.Replay();
Script = new Script(printer);
... Execute Test...
printer.VerifyAllExpectations();
Run Code Online (Sandbox Code Playgroud)