Как издеваться над принтером в .NET? - PullRequest
5 голосов
/ 19 июня 2009

У меня есть приложение, которое отправляет множество PDF-файлов на принтер. Кто-нибудь имел опыт создания объекта Mock, который представляет локальный принтер?

Ответы [ 3 ]

12 голосов
/ 19 июня 2009

Не совсем уверен, что вы пытаетесь сделать, но это может помочь.

Чтобы макетировать принтер (или любое другое внешнее устройство), вы должны инкапсулировать все вызовы к принтеру за интерфейсом, например,

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.

0 голосов
/ 19 июня 2009

Другое решение состоит в том, чтобы написать себе приложение LPD или просто следить за портом 9100 и иметь очередь печати Windows, которая направляет данные в «себя» через 9100 или 515 (LPD).

0 голосов
/ 19 июня 2009

Вы всегда можете приостановить принтер для печати. ​​

Вы можете использовать принтерное устройство, которое записывает в файл.

И вы можете написать собственное устройство печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...