В c # 6.0 Фильтры исключений улучшены для обработки исключений
try
{
DoSomeHttpRequest();
}
catch (System.Web.HttpException e)
{
switch (e.GetHttpCode())
{
case 400:
WriteLine("Bad Request");
case 500:
WriteLine("Internal Server Error");
default:
WriteLine("Generic Error");
}
}
Не совсем уверен, что вы пытаетесь сделать, но это может помочь.
Чтобы смоделировать принтер (или любое другое внешнее устройство), вы должны инкапсулировать все вызовы принтера за интерфейсом, например
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.
Вы всегда можете приостановить принтер для печати.
Вы можете использовать принтер, который записывает в файл.
И вы можете написать собственное печатающее устройство.
Другое решение - написать себе LPD-приложение или просто отслеживать порт 9100 и иметь очередь печати Windows перенаправлять данные «себе» через 9100 или 515 (LPD).