我有一个应用程序需要将许多PDF文件发送到打印机。是否有人有过创建代表本地打印机的Mock对象的经验?
我不完全确定你想做什么,但这可能会有所帮助。
为了模拟打印机(或任何其他外部设备),您应该将所有对打印机的调用封装在接口后面,例如
interface IPrinter
{
void Print(PrintData data);
}
然后您的其他代码必须通过此接口与打印机通信。
之后,您可以实现一个与真实打印机通信的接口版本,以及一个在测试等情况下使用的虚假对象。
可以使用像Rhino Mocks或Moq这样的模拟框架轻松地模拟假对象,或者您也可以自己实现一个假对象。
public class FakePrinter : IPrinter
{
public void Print(PrintData data)
{
// Write to output window or something
}
}
更新:
所有使用打印机的类将会像这样:
public class ClassThatPrints
{
private IPrinter _Printer;
// Constructor used in production
public ClassThatPrints() : this(new RealPrinter())
{
}
// Constructor used when testing
public ClassThatPrints(IPrinter printer)
{
_Printer = printer;
}
public void MethodThatPrints()
{
...
_Printer.Print(printData)
}
}
顺便提一下,如果您使用一个IoC容器,那么您就不需要第一个构造函数了。您可以使用IoC工具来注入打印机类。
你可以随时暂停打印机的打印。
你可以使用一个写入文件的打印机设备。
而且你可以编写自己的打印设备。