Поиск места вызова метода для условного теста

Я пытаюсь написать условный тест, который указывает, что метод должен вызываться только в некоторых контекстах - в частности, у меня есть статический геттер Empty, который я хочу разрешить использовать только в методах тестирования, методы vis, украшенные TestAttribute.

Я знаю, что я также должен пометить геттер как устаревший, использовать другой метод и т. д., но я также хочу, чтобы это было проверено соглашением, чтобы оно не сломалось в будущем.

Я предполагаю, что хочу использовать статический анализ посредством отражения в моем условном тесте. Как мне провести такой анализ?


person Rebecca Scott    schedule 06.05.2013    source источник
comment
Отражение не предоставит детали реализации (тело) ваших методов. Вы должны использовать что-то похожее на Roslyn. Я предлагаю добавить тег roslyn к вашему вопросу, чтобы вы получали помощь от его команды, как это сделал Эрик Липперт с stackoverflow.com/questions/15891197/   -  person Ilya Ivanov    schedule 06.05.2013


Ответы (1)


Да, Рослин может помочь с такими вещами. Пример того, как это может выглядеть как отдельный анализ, может выглядеть примерно так:

var solution = Solution.Load(pathToSolution);
foreach (var project in solution.Projects)
{
    var type = project.GetCompilation().GetTypeByMetadataName(typeNameContainingMethod);
    var method = type.GetMembers("Empty").Single();
    var references = method.FindAllReferences(solution);
    foreach (var referencedSymbol in references)
    {
        foreach (var referenceLocation in references)
        {
            CheckIfCallIsAllowed(referenceLocation);
        }
    }
}

Вы также можете просмотреть пошаговое руководство по созданию проблемы с кодом и шаблон проблемы с кодом, который поставляется с Roslyn CTP, чтобы узнать о другом подходе к выполнению этого во время редактирования, а не в тесте.

person Kevin Pilch    schedule 06.05.2013