如何在.NET中模拟打印机?

6

我有一个应用程序需要将许多PDF文件发送到打印机。是否有人有过创建代表本地打印机的Mock对象的经验?

3个回答

13

我不完全确定你想做什么,但这可能会有所帮助。

为了模拟打印机(或任何其他外部设备),您应该将所有对打印机的调用封装在接口后面,例如

interface IPrinter 
{
   void Print(PrintData data);
}

然后您的其他代码必须通过此接口与打印机通信。

之后,您可以实现一个与真实打印机通信的接口版本,以及一个在测试等情况下使用的虚假对象。

可以使用像Rhino MocksMoq这样的模拟框架轻松地模拟假对象,或者您也可以自己实现一个假对象。

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工具来注入打印机类。


1
另一个解决方案是编写LPD应用程序或仅监视端口9100,并让Windows打印队列将数据路由到9100或515(LPD)上的'itself'。

0

你可以随时暂停打印机的打印。

你可以使用一个写入文件的打印机设备。

而且你可以编写自己的打印设备。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接