Определенно стоит протестировать условия сбоя, поскольку ваш класс правильно генерирует исключение, когда вы этого хотите, и что исключения обрабатываются в классе должным образом.
Это легко сделать, если вы воздействуете на объект, переданный конструктору ... просто передайте имитацию. В противном случае я предпочитаю перенести функциональность в защищенный метод и переопределить защищенный метод, чтобы вызвать случай сбоя. Я буду использовать Java в качестве примера, но это должно быть достаточно легко перенести идеи на C #:
public class MyClass {
public MyClass() throws MyClassException {
// Whatever, including a call to invokeCreateIoCompletionPort
}
protected int invokeCreateIoCompletionPort(String str, int i) {
return StaticClass.createIoCompletionPort(str, i);
}
}
public class MyTest {
public void myTest() {
try {
new MyClass();
fail("MyClassException was not thrown!");
} catch (MyClassException e) {
}
}
private static class MyClassWrapper extends MyClass {
@Override
protected int invokeCreateIoCompletionPort(String str, int i) {
throw new ExpectedException();
}
}
}
Как видите, довольно легко проверить, генерируется ли исключение конструктором или методом, который вы тестируете, и также довольно просто внедрить исключение из внешнего класса, который может вызвать исключение. Извините, я не использую ваш настоящий метод, я просто использовал имя, чтобы проиллюстрировать, как оно звучит, как вы его используете, и как я буду проверять звучащие вами случаи, которые вы хотели проверить.
По сути, любые детали API, которые вы раскрываете, обычно можно протестировать, и если вы хотите ЗНАТЬ, что исключительные случаи работают так, как должны, вы, вероятно, захотите протестировать их.