2009-06-19 75 views

回答

12

不完全確定你想要做什麼,但這可能有幫助。

爲了模擬打印機(或任何其他外部設備),您應該將所有對打印機的調用封裝在一個接口後面,例如,

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工具注入打印機類。

+1

我就是這樣做的+1 +1 – 2009-06-19 17:37:28

0

您可以隨時暫停打印機進行打印。

您可以使用寫入文件的打印機設備。

而且您可以編寫自己的打印設備。

0

另一種解決方案是自己編寫一個LPD應用程序或者只是監視端口9100,並讓Windows打印隊列通過9100或515(LPD)將數據路由到「自己」。