Установите System.Diagnostics.Activity.Current в модульных тестах MS (.NET Core) - PullRequest
1 голос
/ 30 октября 2019

У меня есть доменные классы, которые ссылаются на System.Diagnostics.Activity.Current.Id в моем веб-интерфейсе API. Это значение используется в качестве идентификатора корреляции после сериализации объекта и его сохранения в Космосе. У меня нет проблем с получением этого значения при совершении вызовов в API. Однако если я попытаюсь сослаться на это значение в моих модульных тестах домена, System.Diagnostics.Activity.Current будет нулевым. Я попытался установить его в моих функциях модульного теста, но в моем домене он все еще пуст.

System.Diagnostics.Activity.Current = new System.Diagnostics.Activity("MyUnitTests");

Я знаю, что System.Diagnostics.Activity.Current запускается из текущего HttpContext, но в моих модульных тестах домена также нет текущего http-контекста. Как я могу заставить это работать с моими юнит-тестами?

Пример: Класс домена

public class Company
{  
    public int CompanyId { get; private set; }        
    public string Name { get; private set; }
    public string CorrelationId { get { return System.Diagnostics.Activity.Current.Id; } }
}

Юнит-тест

    [TestMethod]
    public void MyTest()
    {
        Company c = new Company();
        Assert.AreNotEqual(string.Empty, c.CorrelationId);
    }

Этот модульный тест выдает исключение нулевой ссылки, поскольку System.Diagnostics.Activity.Current имеет значение null.

1 Ответ

1 голос
/ 30 октября 2019

Это проблема дизайна, связанная с проблемами смешения, и возможный запах кода.

Текущий код тесно связан с проблемами времени выполнения, которые отсутствуют при модульном тестировании в изоляции.

Скорее всего, вам потребуется запустить интеграционный тест, в котором фактические запросы выполняются в допустимом контексте.

Назначение идентификатора с помощью абстракции службы поможет ослабить связь с проблемами времени выполнения.

И устраните необходимость модульного тестирования простого POCO домена, используемого для хранения данных времени выполнения.

...