2009-06-19 33 views

Trả lời

12

Không hoàn toàn chắc chắn những gì bạn đang cố gắng làm, nhưng điều này có thể hữu ích.

Để thử máy in (hoặc bất kỳ thiết bị ngoại vi nào khác), bạn nên đóng gói tất cả các cuộc gọi đến máy in phía sau giao diện, ví dụ:

interface IPrinter 
{ 
    void Print(PrintData data); 
} 

Tất cả các mã khác của bạn sau đó phải trao đổi với máy in thông qua giao diện này.

Sau đó bạn có thể thực hiện một phiên bản của giao diện này mà nói chuyện với máy in thực, và một đối tượng giả mà bạn có thể sử dụng khi kiểm tra, vv

Đối tượng giả có thể dễ dàng được chế giễu sử dụng một khuôn khổ mocking như Rhino Mocks hoặc Moq, hoặc bạn chỉ có thể thực hiện một giả một mình.

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

Cập nhật:

Tất cả các lớp học sử dụng máy in sau đó sẽ giống như thế này:

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

BTW, nếu bạn sử dụng một container IoC sau đó bạn không cần constructor đầu tiên. Sau đó bạn tiêm các lớp máy in bằng cách sử dụng công cụ IoC.

+1

Đó là cách tôi sẽ thực hiện +1 –

0

Bạn luôn có thể tạm dừng máy in để in.

Bạn có thể sử dụng thiết bị máy in ghi vào tệp.

Và bạn có thể viết thiết bị in của riêng mình.

0

Một giải pháp khác là viết cho mình một ứng dụng LPD hoặc chỉ cần giám sát cổng 9100 và có hàng đợi in Windows định tuyến dữ liệu đến 'chính nó' trên 9100 hoặc 515 (LPD).

Các vấn đề liên quan