Я пишу тесты для своего класса контейнера, и многие из этих тестов проверяют методы запросов, которые возвращают true
или false
. Пример:
myContainer.add(obj);
EXPECT_TRUE(myContainer.contains(obj));
Проблема в том, что многие из этих тестов проходят даже без MyContainer
реализации.
Я думаю , что я уже нашел причину этого, и это показано ниже (проблема в том, что RealityTest.Sneaky
проходит):
TEST(RealityTest, True) {
bool b = true;
EXPECT_TRUE(b);
EXPECT_FALSE(b);
}
TEST(RealityTest, False) {
bool b = false;
EXPECT_TRUE(b);
EXPECT_FALSE(b);
}
TEST(RealityTest, RandomBool) {
bool b = random_bool();
EXPECT_TRUE(b);
EXPECT_FALSE(b);
}
TEST(RealityTest, Sneaky) {
bool b = sneaky();
EXPECT_TRUE(b);
EXPECT_FALSE(b);
}
TEST(RealityTest, NoBool) {
bool b = no_bool();
EXPECT_TRUE(b);
EXPECT_FALSE(b);
}
С функциями, используемыми в тестах, определенных следующим образом:
bool random_bool() {
static std::random_device dev;
static std::uniform_int_distribution dist(0, 1);
return dist(dev);
};
bool sneaky() { cout << "brought to you by GCC (C++17)" << endl; }
bool no_bool() {}
Как мне писать тесты, чтобы этот «подлый» механизм не мог их обмануть, потому что на данный момент, если бы я реализовывал только такие вещи, как MyContainer::add
, MyContainer::get
и MyContainer::remove
, тогда все мои тесты пройти, несмотря на то, что все эти методы запроса не работают.
Примечание: я строю все (тесты и MyContainer
) без какой-либо оптимизации компилятора (режим отладки в Qt Creator).
Примечание 2: Я использую Qt Creator, но не какой-либо из модулей / библиотек Qt. Просто C ++ 17 с googletest
и pthread
(я на Linux).