Есть (точнее был) у меня вот такой код:
const std::string& id() const { return id_; } std::string id() { return id_; }
В нем есть одна досадная опечатка, из которой код:
order.id() = 123;
делал то, что от него не ожидалось, а точнее, ничего не делал. И проблема, как вы наверное уже догадались, в пропущеном значке &
во второй строке. Должно было быть так:
const std::string& id() const { return id_; } std::string& id() { return id_; }
Эта опечатка стоила мне часа поиска проблемы через вторичные признаки в виде иногда не обновляемой базы данных.
Причина? А все потому, что я поленился написать тесты изначально, решив, что это уж очень простые методы. Но теперь таки добавил для этого тест:
TEST(Order, GetterSetters) { Order order; ... EXPECT_EQ(0, order.id()); // Must be initialized. order.id() = 123; EXPECT_EQ(123, order.id()); ... }
Решил сэкономить время, а вышло наоборот.
Вывод: тесты, тесты и тесты.