У меня есть спор с коллегой-программистом о том, является ли хорошей или плохой практикой модифицировать рабочий фрагмент кода только для того, чтобы сделать его тестируемым (например, с помощью модульных тестов).
Мое мнение таково, что все в порядке, конечно, в рамках поддержания хороших объектно-ориентированных и программных практик (не «все обнародовать» и т. Д.).
Мое коллега считает, что изменение кода (который работает) только для целей тестирования является неправильным.
Просто простой пример, подумайте об этом фрагменте кода, который используется некоторым компонентом (написанным на 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...
}
Этот метод принимает объект Assembly для работы, позволяя передать вашу собственную Assembly для тестирования. Мой коллега не думал, что это хорошая практика.
Что считается хорошей и распространенной практикой?
Type
в качестве параметра, а неAssembly
.