我已經實現類型參數測試(Sample #6)相同的測試案例應用到多個類。碰巧分配的字符串時,無論是signed char[]
,unsigned char[]
,const signed char[]
或const unsigned char[]
,我得到:谷歌測試:「字符數組的寬字符串初始化」
../stackoverflow.cpp: In member function ‘void IosTest_DummyTest_Test<gtest_TypeParam_>::TestBody() [with gtest_TypeParam_ = std::basic_istream<char, std::char_traits<char> >]’:
../stackoverflow.cpp:34: instantiated from here
../stackoverflow.cpp:32: error: char-array initialized from wide string
更有趣的是在應用測試用例一個類型時,一切順利就好了,但是當我添加它爆炸的第二種類型。我可以重現該錯誤在以下代碼:
#include "gtest/gtest.h"
#include <iostream>
// Factory methods
template<class T> std::ios* CreateStream();
template<>
std::ios* CreateStream<std::istream>() {
return &std::cin;
}
template<>
std::ios* CreateStream<std::ostream>() {
return &std::cout;
}
// Fixture class
template<class T>
class IosTest: public ::testing::Test {
protected:
IosTest() : ios_(CreateStream<T>()) {}
virtual ~IosTest() {}
std::ios* const ios_;
};
using testing::Types;
typedef Types<std::istream, std::ostream> Implementations;
TYPED_TEST_CASE(IosTest, Implementations);
TYPED_TEST(IosTest, DummyTest) {
signed char c[] = ".";
this->ios_->fill(c[0]);
};
在線路typedef Types<std::istream, std::ostream> Implementations;
被創建的類型稱爲Implementations
列表,並在下面的行,TYPED_TEST_CASE(IosTest, Implementations);
,被定義的測試用例IosTest
將被施加到所述類型化在Implementations
列表中定義。
正如我已經說過,如果我從Implementations
名單我可以編譯,沒有任何警告(我用的是-Wall
標誌)進行的測試,要麼刪除或std::istream
std::ostream
。誰能解釋這種現象?
你使用什麼編譯器? – Poodlehat
我不能看到谷歌的試驗場地的代碼,因爲我不得不在工作中使用一個古老的瀏覽器,但在我看來,當你只包括一個,由於某些原因而使用字符的字符串,但是當你包括它使用的是wchar_t字符串。我會研究如何擴展模板以尋找線索。 – Poodlehat
第32行是'signed char c [] =「。」;'?這是我看到的唯一的'char'。 – MSalters