Некоторые параметры, основанные на том, что вы показали, будут:
- макетировать два метода, которые устанавливают эти значения,
- break
_settings
и config
или дажедва метода, которые предоставляют результаты в отдельный класс (например, что-то вроде конфигурации) и внедряют интерфейс этого класса как зависимость на любом уровне, который имеет смысл.Затем вы можете издеваться над этими ценностями.
Я бы выбрал один из этих вариантов.
Что касается значений View, я бы попытался отделить это.У этого кода есть ряд проблем.
- у вас есть метод
OnFileNameChanged
, и вы, вероятно, не можете изменить его подпись и ничего не возвращать.Итак, я бы выделил код еще больше.Выньте код из него и создайте другой метод, которым вы управляете.Не добавляйте никаких настроек просмотра в этом.Цель заключается в том, чтобы покрыть логику и вернуть объект с некоторыми вычисленными значениями.Затем в OnFileNameChanged
вы назначаете то, что вам нужно для просмотра.Короче говоря, возьмите логическую часть, разберитесь с ней где-нибудь еще и проверьте это.
У вас есть 3 значения, которые вы присваиваете объекту View, поэтому ваш новый метод должен возвращать либо одно значение,или объект с тремя значениями, охватывающий каждую возможность.
public void OnFileNameChanged(string fileName)
{
var calculatedValues = CalculateValues(//might need some params here)
_view.A = calculatedValues.A;
_view.B = calculatedValues.B;
_view.C = calculatedValues.C;
}
public MyReturnType CalculateValues()
{
var result = new MyReturnType();
var config = FirstPrivateOperation();
if ( config == null ) { return result; }
//etc etc
}
public MyReturnType
{
public Whatever A { get;set }
public Whatever B { get;set }
public Whatever C { get;set }
}
Вы можете пойти еще дальше и по-другому разобраться с закрытыми методами.Вы можете захотеть добавить отдельный класс для их замены, и тогда это также облегчит тестирование / макет темы.