2016-07-25 1 views
3

Чтобы облегчить тестирование, я собрал 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. Есть ли лучшее выражение макроса для разрешения типа поля? В качестве альтернативы, есть ли способ заставить его импортировать пространство имен, если оно еще не было импортировано?

ответ

1
  1. Это звучит как ошибка - пожалуйста, вы можете file an issue
  2. Try включая пространство имен в комментировал коде. ReSharper сократит ссылки и автоматически добавить пространство имен в список using заявлений в верхней части файла:

    //$ o = NSubstitute.Substitute.For<$type$>();

+0

решаемая проблема 2 отлично! Благодаря! –

Смежные вопросы