Сравните типы перечислений - PullRequest
0 голосов
/ 07 февраля 2020

Я реализую некоторый модульный тест, используя cpp инфраструктуру модульного теста для visual studio. Я хочу иметь возможность сравнивать перечисления в тесте, но всегда появляется ошибка, которая продолжает появляться.

Это код, который вызывает у меня ошибку.

ClauseEntities ent1 = varMap.at("a");
ClauseEntities ent2 = varMap.at("v");

Assert::AreEqual(ent1, ASSIGN_STATEMENT);
Assert::AreEqual(ent1, VARIABLE);

ent1 - это состояние перечисления, а ASSIGN_STATEMENT - также состояние перечисления из того же перечисления.

Severity    Code    Description Project File    Line    Suppression State
Error   C2338   Test writer must define specialization of ToString<const Q& q> 
for your class class std::basic_string<wchar_t,struct 
std::char_traits<wchar_t>,class std::allocator<wchar_t> > __cdecl 
Microsoft::VisualStudio::CppUnitTestFramework::ToString<enum ClauseEntities>
(const enum ClauseEntities &).  
UnitTesting C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\VS\UnitTest\include\CppUnitTestAssert.h 66  

Не уверен, как я должен создать специализацию шаблона для строки перечислений ..

Ответы [ 2 ]

3 голосов
/ 07 февраля 2020

Я никогда не использовал модульные тесты Microsoft cpp, но из сообщения об ошибке и опыта работы с gtests я думаю, что вам нужно добавить метод ToString для вашего класса enum. (Я предполагаю, что это потому, что в случае сбоя Assert оба аргумента выводятся на некоторый вывод с использованием метода ToString.

В конце эта статья аналогичная проблема решается.

1 голос
/ 07 февраля 2020

Это довольно просто

namespace Microsoft {
namespace VisualStudio {
namespace CppUnitTestFramework { // not sure if namespaces are actually needed

std::wstring ToString(ClauseEntities value)
{
    switch (value) {
    case ClauseEntities::ValueA: return L"ValueA"; //assuming that you are using enum class
    case ClauseEntities::ValueB: return L"ValueB";
    }

    return std::to_wstring(static_cast<int>(value));
}

} // namespace CppUnitTestFramework 
} // namespace VisualStudio
} // namespace Microsoft
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...