У меня есть такая группа -> элемент для добавления/удаления, с кодом snippt:как ожидать аргумент указателя, который создается позже
// production code:
Group::add(Element* e) {...};
Group::remove(Element* e) {...};
ElementDerived::ElementDerived(Group* group){ group->add(this);}
ElementDerived::~ElementDerived(Group* group){ group->remove(this);}
всякий раз, когда я хочу, чтобы проверить класс ElementDerived
, я должен сделать следующее в настройке/отрыве. Однако, как я могу установить аргумент ожидания явно без _
?
// test code:
struct Test_ElementDerived : public ::testing::Test {
void SetUp() override {
ElementDerived* p = nullptr;
EXPECT_CALL(group, add(_)) // how to set expection on the pointer argument?
.WillOnce(Invoke([&p](auto base_ptr) {
p = static_cast<ElementDerived*>(base_ptr);
}));
sut = std::make_unique<ElementDerived>(&group);
}
void TearDown() override {
EXPECT_CALL(group, remove(sut.get()));
}
MockGroup group{};
std::unique_ptr<ElementDerived> sut;
};
ОЖИДАНИЯ, вероятно, должны быть установлены в телах ТЕСТ, а не в приспособлении. –
хорошо, я согласен, но это общее правило. в некоторых случаях действия уже выполняются с помощью конструктора. и вы видите фрагмент кода, это не сложный или необоснованный случай. – pepero
'EXPECT_EQ (sut.get(), p);'? – Jarod42