Коварная опечатка в getter'e

Есть (точнее был) у меня вот такой код:

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());
  ...
}

Решил сэкономить время, а вышло наоборот.

Вывод: тесты, тесты и тесты.


Оригинальный пост | Disclaimer

Комментарии