Здравствуйте, я тестирую метод, который выполняет некоторые операции I/O
. Мне было интересно, есть ли какой-нибудь способ приостановить этот метод на определенное время c, в указанной строке c , без изменения исходного кода.
Оригинальный метод
public async Task<int> SomeMethodAsync()
{
var x=DoSomething1();
int value=await DoSomething2Async();
return value;
}
Посмотрите на метод выше. Есть ли способ от TestCase
добавить задержка или пауза в указанном c месте в целевом методе? Я бы хотел, чтобы мой метод стал примерно таким Только при модульном тестировании !:
Желаемый метод при модульном тестировании
public async Task<int> SomeMethodAsync()
{
var x=DoSomething1(); //line index=0
# await Task.Delay(delay) //delay set in the testcase
int x=await DoSomething2Async(); //line index=1
return x;
}
Unit Test
[TestCase]
public void TestSomeMethodWithDelay()
{
var delay=1000;
int desiredLineIndex=1;
int result=await SomeMethodAsync();
}
Как вы можете видеть, я хотел бы при тестировании метода вставить некоторый код перед целевой строкой, в моем случае await Task.Delay(interval)
, где interval
установлено в TestCase
. Я не хочу изменять / загрязнять исходный код директивами препроцессора для тестирования. Единственный другой способ, которым я мог бы подумать, - это использовать что-то вроде System.Reflection.Emit
и переписать целевой метод при тестировании.
Есть ли какие-то другие элегантный способ?
PS Я просто хочу при запуске определенного набора тестов вставить задержку между двумя lines of code
без изменения исходного кода.
Обновление SomeMethodAsync
от другого dll
. Код не должен быть изменен! DoSomething2Async
- это внешний вызов.