Модульне тестування

Тести є чудовим способом для забезпечення стабільних, перевірених додатків. Вони служать в якості інтерактивної документації і дозволяють змінювати код, не побоюючись порушити функціональність. Мова D забезпечує зручний і рідний синтаксис unittest, як частину мови D. Блоки unittest можуть бути використані для тестування функціональності вихідного коду будь-де у межах модулів D.

// Блок для моєї функції
unittest
{
    assert(myAbs(-1) == 1);
    assert(myAbs(1)  == 1);
}

Це уможливлює пряму розробку через тестування за необхідністю.

Запуск і реалізація блоків unittest

Блоки unittest можуть містити довільний код, який компілюється і запускається лише тоді, коли додано параметер -unittest у командному рядку при компіляції за допомогою компілятора DMD. DUB також має опцію компіляції і запуску тестів через команду dub test.

Перевірка прикладів з assert

Зазвичай, unittest-и містять вирази assert, які перевіряють функціональність потрібної функції. Блоки unittest зазвичай розташовані поблизу реалізації функції, яка може бути або з самого початку вихідного коду, або всередині класів чи структур.

Збільшення покриття коду

Юніт тести є потужною зброєю для забезпечення куленепробивних додатків. Загальною мірою при перевірці покриття програми за допомогою тестів є покриття коду. Це співвідношення виконується всупереч існуючих рядків коду. Компілятор DMD дозволяє легко створювати звіти щодо покриття коду шляхом додавання опції -cov. Файл .lst, в якому міститься детальна статистика, буде створений для кожного модуля.

Так як компілятор може вивести атрибути для шаблонного коду автоматично, є загальний патерн для додавання анотацій у юніт тести, щоб забезпечити атрибути для протестованого коду:

unittest @safe @nogc nothrow pure
{
    assert(myAbs() == 1);
}

Поглиблення

rdmd playground.d