2009-06-19 17 views

risposta

12

Non completamente sicuro di ciò che si sta tentando di fare, ma questo potrebbe aiutare.

Per simulare una stampante (o qualsiasi altro dispositivo esterno) è necessario incapsulare tutte le chiamate alla stampante dietro un'interfaccia, ad es.

interface IPrinter 
{ 
    void Print(PrintData data); 
} 

Tutti gli altri codici devono quindi comunicare con la stampante tramite questa interfaccia.

È possibile quindi implementare una versione di questa interfaccia che parla alla stampante vera e propria, e un oggetto falso che è possibile utilizzare durante la prova ecc

L'oggetto falso può essere facilmente deriso utilizzando un quadro di scherno come Rhino Mocks o Moq, oppure puoi semplicemente implementarne uno falso.

public class FakePrinter : IPrinter 
{ 
    public void Print(PrintData data) 
    { 
     // Write to output window or something 
    } 
} 

Aggiornamento:

Tutte le classi che utilizza la stampante sarà quindi simile a questa:

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) 
    } 
} 

A proposito, se si utilizza un contenitore CIO, allora non è necessario il primo costruttore. Quindi si iniettano le classi della stampante usando lo strumento IoC.

+1

Ecco come lo farei +1 –

0

È sempre possibile mettere in pausa la stampante per la stampa.

È possibile utilizzare un dispositivo stampante che scrive su un file.

E si può scrivere il proprio dispositivo di stampa.

0

Un'altra soluzione è scrivere un'app LPD o semplicemente monitorare la porta 9100 e disporre di una coda di stampa di Windows che indirizza i dati a "sé" su 9100 o 515 (LPD).

Problemi correlati