如何在.NET中模拟打印机?
我有一个向打印机发送许多PDF的应用程序。是否有人有过创建表示本地打印机的模拟对象的经验?您可以随时暂停打印机进行打印 您可以使用写入文件的打印机设备如何在.NET中模拟打印机?,.net,mocking,.net,Mocking,我有一个向打印机发送许多PDF的应用程序。是否有人有过创建表示本地打印机的模拟对象的经验?您可以随时暂停打印机进行打印 您可以使用写入文件的打印机设备 您可以编写自己的打印设备。不完全确定您要做什么,但这可能会有所帮助 为了模拟打印机(或任何其他外部设备),您应该将对打印机的所有调用封装在接口后面,例如 interface IPrinter { void Print(PrintData data); } 然后,所有其他代码必须通过此接口与打印机通信 然后,您可以实现一个与真实打印机对话
您可以编写自己的打印设备。不完全确定您要做什么,但这可能会有所帮助 为了模拟打印机(或任何其他外部设备),您应该将对打印机的所有调用封装在接口后面,例如
interface IPrinter
{
void Print(PrintData data);
}
然后,所有其他代码必须通过此接口与打印机通信
然后,您可以实现一个与真实打印机对话的接口版本,以及一个测试时可以使用的假对象等
伪对象可以很容易地使用或之类的模拟框架进行模拟,或者您可以自己实现一个伪对象
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工具注入打印机类。另一种解决方案是为自己编写一个LPD应用程序,或者简单地监视端口9100,并让Windows打印队列通过9100或515(LPD)将数据路由到“自身”