1. Основные понятия тестирования

1.1. Типы тестирования

1.2. Терминология

2. Модульное тестирование

2.1. Особенности модульного тестирования

2.2. Пример юнит-теста

#include <gtest/gtest.h>

class DwtTest: public ::testing::Test
{
protected:
    DwtTest() : img(kWidth * kHeight) {
        std::fill(img.begin(), img.end(), 0);

        auto it = img.begin() + kHeight/2 * kWidth;
        for (auto i = 0; i < kHeight/5; ++i)
            std::fill_n(it + i * kWidth + kWidth/4, kWidth/2, 255);
    }

    void SetUp() {}
    void TearDown() {}

protected:
    std::vector<float> img;
};

TEST_F(DwtTest, DwtIDwt)
{
    std::vector<float> subbands(img);
    ASSERT_EQ(wt2d_cdf97_fwd(subbands.data(), kHeight, kWidth, 3), 0);

    std::vector<float> restored(subbands);
    ASSERT_EQ(wt2d_cdf97_inv(restored.data(), kHeight, kWidth, 3), 0);
    ASSERT_EQ(restored.size(), img.size());
    for (int i = 0; i < img.size(); ++i)
        EXPECT_NEAR(restored[i], img[i], 1) << "Index " << i;
}

2.3. Состав модульного теста

2.4. Схема иерархии модульных тестов

TestSuite(S0)
    constructor
    TestCase(S0::C0)
        constructor
            actions
            asserts, expects
        destructor
    TestCase(S0::C1)
        constructor
            actions
            asserts, expects
        destructor
    destructor
TestSuite(S1)
    constructor
    TestCase(S1::C0)
    TestCase(S1::C1)
    TestCase(S1::C2)
    destructor
...

3. Пример фреймворка модульного тестирования

3.1. Движок тестирования Catch

3.2. Примеры

4. Подходы разработки через тестирование

4.1. Test Driven Development

4.2. Интеграционное тестирование

4.3. Mock & stubs

4.4. Тесты на устойчивость

4.5. Нагрузочное тестирование