Test Failed — Не удалось настроить контекст выполнения для запуска теста

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

Первый глобальный, который я должен был закончить, был:

extern std::atomic<Foo> GlobalFoo;

куда Foo является enum class, Я написал 2 отдельных класса для обработки установки и получения значения. Я построил модульные тесты, которые прошли, как и ожидалось. В тестовые файлы я включаю переменные для копирования глобального состояния (плюс дополнительные объекты без состояния, которые я могу использовать для тестирования). Затем я могу использовать эти глобальные копии для восстановления значений после каждого теста. Например:

namespace Tests
{
// Global save state
const Framework::Foo originalGlobal = Framework::GlobalFoo;

// Test constants
const auto service = Framework::FooRetriever();
const auto testFoo = Framework::Foo::SomeValue;

TEST_CLASS(FooRetrieverUnitTests)
{

...

Следующий глобальный проект, над которым я начал работать, был:

extern const std::unordered_map<
std::vector<char>, std::vector<char>, std::hash<std::vector<char>> GlobalBar;

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

Я начинаю с написания моих тестовых констант:

namespace Tests
{
// Alias
using Collection = const std::unordered_map<
std::vector<char>, std::vector<char>, std::hash<std::vector<char>>;

// Global state
const std::shared_ptr<Collection> global =
std::make_shared<Collection>(Framework::GlobalBar);

TEST_CLASS(FooRetrieverUnitTests)
{
// TODO
};
}

Тем не менее, запуск теста в этот момент выдает следующее сообщение для всех моих тестов (т.е. не только этот новый тест):

Не удалось настроить контекст выполнения для запуска теста

Комментирование глобального позволяет запускать все тесты.

Если я переместить строку, прокомментированную как // Global state в метод теста, то тест будет работать без проблем.

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

Мой проект представляет собой статическую библиотеку, а мои модульные тесты представлены в форме DLL (это подход по умолчанию, используемый в модуле модульного тестирования Microsoft Visual Studio).

Минус обычная рутина «не используй глобалы» (мне нужно несколько глобалов в этом приложении, в основном касающихся путей и языковых настроек), мне было интересно, может ли кто-нибудь дать некоторое представление о проблеме, с которой я сталкиваюсь. Возможно, я делаю что-то не так, делая копию глобальной коллекции в моем Tests namespace или есть другая ошибка в модульном тестировании Visual Studio.

Код компилируется без ошибок или предупреждений, но модульные тесты не будут работать в этом состоянии.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]