Чтобы облегчить тестирование, я собрал Resharper source template, чтобы быстро создать замену для класса с NSubstitute.Шаблон исходного шаблона Resharper, добавляющий пустой оператор
[SourceTemplate]
public static void substitute<T>(this T o,
[Macro(Expression = "guessExpectedType()", Editable = -1)] string type)
where T : class
{
//$ o = Substitute.For<$type$>();
}
Предполагая, что поле, private ILogger logger;
уже определен, это позволяет мне тип logger.sub
(Resharper предлагает полное имя метода оттуда) для создания logger = Substitute.For<ILogger>();
.
У меня все еще есть две проблемы, которые мне не удалось выяснить.
1) Иногда это ставит пустое заявление до заменяемого кода, т.е.
;
logger = Substitute.For<ILogger>();
Это, кажется, случается всякий раз, когда есть утверждения ниже заменяемая линии. Затем Resharper предложит удалить пустой оператор. Почему это добавление начинается, и как я могу его предотвратить?
2) Он только правильно догадывается о заменяющем типе, если NSubstitute уже импортирован для класса (using NSubstitute;
). Без этого я получаю logger = Substitute.For<object>();
и предложение импортировать NSubstitute. Есть ли лучшее выражение макроса для разрешения типа поля? В качестве альтернативы, есть ли способ заставить его импортировать пространство имен, если оно еще не было импортировано?
решаемая проблема 2 отлично! Благодаря! –