代码之家  ›  专栏  ›  技术社区  ›  Cody C

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

  •  5
  • Cody C  · 技术社区  · 16 年前

    3 回复  |  直到 16 年前
        1
  •  12
  •   BengtBe    16 年前

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

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

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

        2
  •  0
  •   Paulo Santos    16 年前

    您可以随时暂停打印机进行打印。

    您可以使用写入文件的打印机设备。

    您可以编写自己的打印设备。

        3
  •  0
  •   Douglas Anderson    16 年前

    另一个解决方案是为自己编写一个LPD应用程序,或者只需监视端口9100,并让Windows打印队列通过9100或515(LPD)将数据路由到“自身”。

    推荐文章