Estoy implementando alguna prueba de unidad usando el marco de prueba de unidad cpp para visual studio. Quiero poder comparar enumeraciones en la prueba, pero siempre hay un error que sigue apareciendo.

Este es el código que me causa el error.

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

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

Ent1 es un estado enum y ASSIGN_STATEMENT también es un estado enum desde el mismo enum.

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  

No estoy seguro de cómo se supone que debo crear una especialización de plantilla para una serie de enumeraciones.

0
calveeen 7 feb. 2020 a las 19:37

2 respuestas

La mejor respuesta

Esto es bastante simple

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
1
Marek R 7 feb. 2020 a las 17:21

Nunca he usado pruebas unitarias de microsoft cpp, pero por el mensaje de error y la experiencia con gtests creo que debe agregar un método ToString para su clase de enumeración. (Supongo que es) Es porque si el Assert falla, ambos argumentos se imprimen en alguna salida usando el método ToString

Al final de este artículo similar el problema está resuelto.

3
Hawky 7 feb. 2020 a las 17:06