Aby móc przetestować mój kod C++, zwykle przekażę konstruktorowi klasy testowej jeden lub kilka obiektów, które mogą być "kodem produkcji" lub obiektami fałszywymi/symulowanymi (nazwijmy to te przedmioty wstrzyknięcia). Zrobiłem to albo przezInterfejsy kontra szablony dla wtrysku zależności w C++
- Tworzenie interfejsu, który dziedziczy zarówno klasa "kod produkcyjny", jak i klasa fałszywej/fałszywej.
- Wykonywanie klasy w ramach testu klasy szablonów, która przyjmuje typy obiektów wtrysku jako parametry szablonu oraz instancje obiektów wtrysku jako parametry do konstruktora.
Niektóre losowe myśli:
- Dopóki nie mamy pojęcia (C++ 0x), tylko dokumentacja i parametr nazewnictwa będzie podpowiedź co do zapewnienia klasę badanego (przy użyciu szablonów).
- Nie zawsze jest możliwe, aby stworzyć interfejsy dla starszych kod
- Interfejs jest w zasadzie tylko stworzony, aby być w stanie zrobić iniekcji zależność
- W ten sam sposób: Templating klasa badanego odbywa się wyłącznie w celu umożliwienia iniekcji zależność
Jakie są Twoje myśli? Czy istnieją inne rozwiązania tego problemu?
To takie proste, ale naprawdę potężne. Lubię to! –
Dla przypomnienia, ludzie powinni mieć świadomość, że są problemy z metodami wirtualnymi (zobacz idiom Non-Virtual Interface (NVI)). –
Tak, czasami takie podejście może stać w konflikcie z "purystycznym NVI". W wielu przypadkach można pozbyć się kpiny z chronionych funkcji wirtualnych, ale jeśli trzeba kpić z publicznego nie-wirtualnego interfejsu, to nie zaszkodzi on zbytnio, aby stał się publiczny-wirtualny i nadal używa NVI. W tym przypadku traci się pewne kompilowanie najlepszych praktyk, ale nie jest to najlepsza praktyka. –