我正在编写一些单元测试,这些测试将验证我们对使用除普通拉丁字母之外的其他字符集的各种资源的处理:西里尔文、希伯来文等。
我遇到的问题是我找不到将期望嵌入到测试源文件中的方法:这是我正在尝试做的一个示例...
///
/// Protected: TestGetHebrewConfigString
///
void CPrIniFileReaderTest::TestGetHebrewConfigString()
{
prwstring strHebrewTestFilePath = GetTestFilePath( strHebrewTestFileName );
CPrIniFileReader prIniListReader( strHebrewTestFilePath.c_str() );
prIniListReader.SetCurrentSection( strHebrewSubSection );
CPPUNIT_ASSERT( prIniListReader.GetConfigString( L"דונדארןמע" ) == L"דונהשךוק") );
}
这根本行不通。以前我使用一个宏来解决这个问题,该宏调用一个将窄字符串转换为宽字符串的例程(我们在应用程序中到处都使用拖字符串,所以它是现有代码)
#define UNICODE_CONSTANT( CONSTANT ) towstring( CONSTANT )
wstring towstring( LPCSTR lpszValue )
{
wostringstream os;
os << lpszValue;
return os.str();
}
上面测试中的断言变成了:
CPPUNIT_ASSERT( prIniListReader.GetConfigString( UNICODE_CONSTANT( "דונדארןמע" ) ) == UNICODE_CONSTANT( "דונהשךוק" ) );
这在 OS X 上运行良好,但现在我正在移植到 linux,我发现测试都失败了:这一切都让人感觉很不自然。谁能告诉我他们是否有更好的解决方案来解决这个问题?