Я пишу кучу интеграционных тестов для проекта. Я хочу вызывать каждый отдельный метод точки интеграции, заключенный в блок try / catch, чтобы в случае сбоя я мог отображать какую-то обратную связь, а не просто вылетать из приложения. Я также хочу иметь возможность рассчитать, сколько времени занимают вызовы, и проверять возвращаемые значения при необходимости. Итак, у меня есть класс IntegrationResult с некоторым базовым описанием, свойствами результата и прошедшего времени:
class IntegrationResult
{
private StopWatch _watch;
public string Description {get;set;}
public string ResultMessage {get;set;}
public bool TestPassed {get;set;}
public string TimeElapsed {get { return _watch == null ? "0" : _watch.Elapsed.TotalMilliseconds.ToString(); } }
public void Start()
{
_watch = StopWatch.StartNew();
}
public void Stop()
{
_watch.Stop();
}
}
Код, который я продолжаю писать, выглядит следующим образом:
IntegrationResult result = new IntegrationResult();
result.Description = "T-SQL returns expected results";
try
{
result.Start();
SomeIntegrationPoint("potential arguments"); //This is the line being tested
result.Stop();
//do some check that correct data is present
result.TestPassed = true;
result.ResultMessage = "Pulled 10 correct rows";
}
catch(Exception e)
{
result.TestPassed = false;
result.ResultMessage = String.Format("Error: {0}", e.Message);
}
Мне бы очень хотелось иметь возможность просто передать метод SomeIntegrationPoint в качестве аргумента и делегата или что-то еще, чтобы проверить результаты, но я не могу понять, возможно ли это. Существуют ли какие-либо платформы для обработки такого типа тестирования, или у вас есть какие-либо предложения о том, как можно упростить код для лучшего повторного использования? Я устал набирать этот блок;)