Pracuję nad tym, aby moje klasy mogły być testowane jednostkowo przy użyciu wstrzykiwania zależności. Ale niektóre z tych klas mają wielu klientów i nie jestem jeszcze gotowy przefakturować ich wszystkich, aby zacząć przekazywać zależności. Więc staram się to robić stopniowo; zachowując na razie domyślne zależności, ale pozwalając na ich zastąpienie w celu przetestowania.
Jednym z moich podejść jest przeniesienie wszystkich „nowych” wywołań do własnych metod, np .:
public MyObject createMyObject(args) {
return new MyObject(args);
}
Następnie w moich testach jednostkowych mogę po prostu podklasować tę klasę i zastąpić funkcje tworzenia, aby zamiast tego tworzyły fałszywe obiekty.
Czy to dobre podejście? Czy są jakieś wady?
Mówiąc bardziej ogólnie, czy dobrze jest mieć sztywno zakodowane zależności, o ile można je zastąpić do testowania? Wiem, że preferowanym podejściem jest wyraźne wymaganie ich od konstruktora i chciałbym w końcu tam dotrzeć. Ale zastanawiam się, czy to dobry pierwszy krok.
Jedna wada, która właśnie mi się przydarzyła: jeśli masz prawdziwe podklasy, które musisz przetestować, nie możesz ponownie użyć podklasy testowej, którą napisałeś dla klasy nadrzędnej. Będziesz musiał utworzyć podklasę testową dla każdej prawdziwej podklasy i będzie musiał zastąpić te same funkcje tworzenia.