У меня есть класс, в котором нет конструктора по умолчанию, но конструктор может выбросить. Я хотел провести тест вроде:
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);
Однако следующее не соответствует 't:
std::string filename("somefilename");
EXPECT_THROW(MyClass(filename), std::runtime_error);