Prowadzę debatę z kolegą programistą na temat tego, czy dobrą lub złą praktyką jest modyfikowanie działającego kodu tylko w celu umożliwienia jego przetestowania (na przykład poprzez testy jednostkowe).
Moim zdaniem jest w porządku, oczywiście w granicach utrzymywania dobrych praktyk obiektowych i inżynierii oprogramowania (nie „upubliczniania wszystkiego” itp.).
Zdaniem mojego kolegi modyfikowanie kodu (który działa) tylko do celów testowych jest błędne.
Prosty przykład, pomyśl o tym fragmencie kodu, który jest używany przez jakiś komponent (napisany w C #):
public void DoSomethingOnAllTypes()
{
var types = Assembly.GetExecutingAssembly().GetTypes();
foreach (var currentType in types)
{
// do something with this type (e.g: read it's attributes, process, etc).
}
}
Zasugerowałem, że ten kod można zmodyfikować, aby wywołać inną metodę, która wykona rzeczywistą pracę:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
Ta metoda pobiera obiekt asemblera do pracy, umożliwiając przekazanie własnego asemblera do przeprowadzenia testu. Mój kolega nie uważał, że to dobra praktyka.
Co jest uważane za dobrą i powszechną praktykę?
Type
jako parametr, a nie jakoAssembly
.