Я маю дискусію з колегою-програмістом про те, чи є хорошою чи поганою практикою змінювати робочий фрагмент коду лише для того, щоб зробити його перевіряемим (наприклад, через одиничні тести).
На мою думку, це нормально, в межах дотримання хороших об'єктно-орієнтованих та звичайно практичних програмних технологій (не "оприлюднення все" тощо).
Думка мого колеги полягає в тому, що змінювати код (який працює) лише для цілей тестування - неправильно.
Просто простий приклад, придумайте цей фрагмент коду, який використовується деяким компонентом (написаний на 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).
}
}
Я припустив, що цей код можна змінити, щоб викликати інший метод, який виконає фактичну роботу:
public void DoSomething(Assembly asm)
{
// not relying on Assembly.GetExecutingAssembly() anymore...
}
Цей метод передбачає роботу над об'єктом асамблеї, що дозволяє пройти власну асамблею, щоб зробити тестування. Мій колега не вважав це гарною практикою.
Що вважається хорошою і поширеною практикою?
Type
як параметр, а не anAssembly
.