2016-01-20 2 views
1

У меня есть класс и метод, а именно: -Roslyn Использование для перезаписи и выполнения метода

public class Class1 
{ 
    public void SomeMethod(int x, int y) 
    { 
    using(var scope = new TransactionScope()) 
    { 
     if(x == 0 && y == 0) 
     { 
      //Do Something 
     } 
     if(x ==1) 
     { 
     //Do something 
     } 

     // Need to throw an exception for running a test case to check 
     // rollback scenario    

     if(y == 2) 
     { 
      //Do something 
     } 
     scope.Complete(); 
    } 
    } 
} 

Я хочу, чтобы проверить область транзакции отката вещи и поэтому я хочу, чтобы ввести исключение между вышеприведенным кодом (т.е. хочет заменить "// нужно бросить исключение для запуска тестового случая. .. "часть с throw new Exception (" some message ")) и запустить в памяти повторно выполненный метод для проверки, если что-то пойдет не так между выполнением кода, тогда будет откат. Я не хочу ничего менять в моем существующем коде только для тестирования сценария отката.

Независимо от того, что я прочитал о Roslyn (я очень новичок в этом пространстве .NET), я думаю, что это можно сделать с использованием некоторого API Roslyn. Но я точно не знаю, как это сделать, так как я не очень хорошо знаком с тем же. Если кто-то может дать примерное предложение, это было бы очень полезно.

+1

Я бы ввел «Do something», который бросает. Но я буду использовать обычные методы DI. –

+0

Byt, «Roslyn» - это новая платформа компилятора для .NET (Visual C# и Visual Basic) и работает только с текстом исходного кода. Невозможно перекомпилировать. Он просто компилируется! –

+0

@PauloMorgado: Мне казалось, что накладные расходы на меня накладывают что-то (может быть, объект Action method) только для одной цели тестирования, а также нужно будет вызвать действие в коде, и это было бы бесполезно в производственном коде , Если я предоставил относительный путь к API Roslyn, возможно ли выполнить вышеупомянутую цель? Я готов иметь новый файл вместе, что должно быть хорошо в соответствии с принципом Open Closed. –

ответ

-1

Вы можете определенно сделать это с Roslyn. Это будет тот же инструмент, что и запись компилятора AOP. Вам нужно будет изменить код и затем скомпилировать его. Кроме того, вы захотите запустить тест на сборках модифицированного кода. Прямо прямо сейчас, как это сделать с Roslyn, но вы можете попробовать описанный подход here.