デフォルトのコンストラクターを持たないクラスがありますが、コンストラクターがスローする可能性があります。私は次のようなテストをしたいと思っていました:
EXPECT_THROW(MyClass(param), std::runtime_error);
しかし、コンパイラ はg++
、 のデフォルト コンストラクタがないと文句を言いますMyClass
。ただし、以下...
EXPECT_THROW(MyClass foo(param), std::runtime_error);
...動作し、テストは期待どおりに合格します。Googletest が一時オブジェクトを受け入れないのはなぜですか?
class MyClass
{
public:
MyClass(std::string const& filename);
//...
};
興味深いことに、別の変数にファイル名が含まれないようにテストをリファクタリングしていたので、確認を求められたときに、次のように動作することがわかりました。
EXPECT_THROW(MyClass("somefilename"), std::runtime_error);
ただし、次の場合はそうではありません。
std::string filename("somefilename");
EXPECT_THROW(MyClass(filename), std::runtime_error);