Używamy StructureMap w nowym projekcie rozwoju oprogramowania. Jeden z członków zespołu wdrożył test jednostkowy, który zasadniczo testuje konfigurację kontenera StructureMap . Robi to, wykonując następujące czynności;
- Liczy liczbę wystąpień zestawów skonfigurowanych dla klas w naszej przestrzeni nazw aplikacji.
- Definiuje oczekiwane wystąpienia na poziomie klasy
- Zapewnia, że oczekiwane wystąpienia są zgodne z całkowitą liczbą znalezionych wystąpień.
- Zapewnia, że oczekiwane wystąpienia są zgodne z tymi zdefiniowanymi w teście
Przykładem tego jest;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
Mamy również „testy jednostkowe” dla następującej klasy;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
W tych testach wyśmiewamy IEnvironmentRepository, więc nie wstrzykiwalibyśmy go z kontenera, jak to by się stało w systemie na żywo.
Kolega zignorował test jednostkowy w konfiguracji mapy struktury z komentarzem w stylu „Test jednostkowy testuje tylko własną konfigurację”. To był oczywiście cel testu i moim zdaniem jest całkowicie poprawny. Poprosiłem faceta, który zignorował test, o usunięcie konfiguracji mapy struktury dla IEnvironmentRepository(z testem wciąż ignorowanym) i uruchomienie pełnego zestawu testów jednostkowych, wszystkie przeszły pomyślnie. Następnie uruchomiliśmy aplikację, która się przewróciła, ponieważ konfiguracja kontenera była teraz nieprawidłowa. Moim zdaniem potwierdziło to wartość testu, mój kolega wciąż się nie zgadzał. Po prostu stwierdził, że nie powinniśmy testować konfiguracji, ale uważam, że mieści się to w zakresie testów jednostkowych.
Tak więc szereg pytań;
- Czy to prawidłowy test jednostkowy - Testujemy konfigurację naszego kontenera, nie działa mapa struktury (ale widzę nakładanie się)
- Jeśli nie, w jaki sposób można sprawdzić poprawność konfiguracji bez jej testowania. Jak powstrzymać kogoś przed przypadkowym usunięciem wymaganego wiersza kodu i wpisaniem go?
- Czy
MyClasstest jednostkowy powinien rozwiązać instancjęIEnvironmentRepositoryz kontenera i przekazać ją?