比较枚举类型
Compare enum types
我正在使用 visual studio 的 cpp 单元测试框架实施一些单元测试。我希望能够在测试中比较枚举,但总是会出现错误。
这是导致我出错的代码。
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 Studio19\Enterprise\VC\Auxiliary\VS\UnitTest\include\CppUnitTestAssert.h 66
不确定我应该如何为枚举字符串创建模板专业化。
我从未使用过 Microsoft cpp 单元测试,但根据错误消息和 gtests 的经验,我认为您必须为您的枚举 class 添加一个方法 ToString
。 (我的猜测是)这是因为如果断言失败,两个参数都会使用 ToString
方法打印到某些输出。
文章末尾this类似问题已解决。
这很简单
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
我正在使用 visual studio 的 cpp 单元测试框架实施一些单元测试。我希望能够在测试中比较枚举,但总是会出现错误。
这是导致我出错的代码。
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 Studio19\Enterprise\VC\Auxiliary\VS\UnitTest\include\CppUnitTestAssert.h 66
不确定我应该如何为枚举字符串创建模板专业化。
我从未使用过 Microsoft cpp 单元测试,但根据错误消息和 gtests 的经验,我认为您必须为您的枚举 class 添加一个方法 ToString
。 (我的猜测是)这是因为如果断言失败,两个参数都会使用 ToString
方法打印到某些输出。
文章末尾this类似问题已解决。
这很简单
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