Este cu siguranță merită să testați condițiile de eșec, atât că clasa dvs. aruncă o excepție în mod corespunzător atunci când doriți și că excepțiile sunt tratate corespunzător în clasă.
Acest lucru se poate face cu ușurință dacă acționați pe un obiect care a trecut la constructor ... doar treceți într-o momeală. Dacă nu, am tendința de a prefera ca funcționalitatea să fie mutată într-o metodă protejată și să înlocuiască metoda protejată pentru a evoca cazul meu de eșec. Voi folosi Java ca exemplu, dar ar trebui să fie destul de ușor să port ideile într-un caz 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();
}
}
}
După cum puteți vedea, este destul de ușor să testați dacă o excepție este aruncată de constructorul sau metoda pe care o testați și este, de asemenea, destul de ușor să injectați o excepție de la o clasă externă care poate arunca o excepție. Îmi pare rău că nu folosesc metoda dvs. reală, tocmai am folosit numele pentru a ilustra cum se pare că o folosiți și cum aș testa cazurile pe care ați vrut să le testați.
Practic, toate detaliile API pe care le expuneți pot fi de obicei testate și, dacă doriți să știți că cazurile excepționale funcționează așa cum ar trebui, probabil că veți dori să le testați.