同じテストケースを複数のクラスに適用するために、型パラメータ化テスト(Sample #6)を実装しました。より興味深いのは何ですかGoogleテスト:「ワイド文字列から初期化された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
1種類にテストケースを適用するとき、すべてがうまく行くということですが、ときに私:signed char[]
、unsigned char[]
、const signed char[]
またはconst unsigned char[]
のいずれかに文字列を割り当てるときに、私が得ることが起こりますそれが爆発する第2のタイプを追加してください。私は、次のコードでエラーを再現することができます:ラインtypedef Types<std::istream, std::ostream> Implementations;
で
#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]);
};
がImplementations
と呼ばれるタイプのリストを作成し、次の行、TYPED_TEST_CASE(IosTest, Implementations);
で、テストケースIosTest
が型付きに適用されることが規定されていますImplementations
リストに定義されています。
私は(私は-Wall
フラグを使用しています)警告なしにテストをコンパイルして実行することができますImplementations
リストからstd::istream
かstd::ostream
のいずれかを削除する場合、私はすでに、述べてきたように。誰もこの現象を説明できますか?
どのコンパイラを使用していますか? – Poodlehat
私は職場で古代のブラウザを使わなければならないので、googleテストサイトでコードを見ることはできませんが、1つしか含まれていないと何らかの理由で文字列が使用されるようですが、それはwchar_t文字列を使用しています。私はテンプレートが手がかりのためにどのように拡大されているのかを見ていきたいと思います。 – Poodlehat
32行目は 'signed char c [] ="。 ";'ですか?それは私が見る唯一のchar []です。 – MSalters