Git Product home page Git Product logo

unit_test_task's Introduction

unit_test_task

Требования:

Windows:

Linux:

Подготовка рабочего места

Необходимо склонировать этот репозиторий. Этот шаг делается один раз. Затем нужно будет просто заходить в склонированную директорию unit_test_task. Для этого понадобится командная строка.

git clone https://github.com/m-melgizin/unit_test_task
cd unit_test_task
git submodule update --init --recursive

Выполнение задания:

Для примера мы будем считать, что задана следующая функция (у всех она своя, не надо копировать все отсюда 😀):

int sum(int a, int b)
{
    return a + b;
}

1. Добавить объявление и описание тестируемой функции

1.1. Объявление функции

Перейдите в файл task/task.hpp. Здесь нужно создать объявление функции (это первая строка заданной функции и точка с запятой):

task/task.hpp:

#ifndef TASK_HPP
#define TASK_HPP

#include "stdc++.h"

// описание функции

#endif // !TASK_HPP

должно превратиться в

task/task.hpp:

#ifndef TASK_HPP
#define TASK_HPP

#include "stdc++.h"

int sum(int a, int b);

#endif // !TASK_HPP

1.2. Описание функции

Перейдите в файл task/task.cpp. Здесь нужно создать описание функции (это сама функция):

task/task.cpp:

#include "task.hpp"

// реализация функции

должно превратиться в

task/task.cpp:

#include "task.hpp"

int sum(int a, int b)
{
    return a + b;
}

2. Составить unit-тесты

В файле task_ut/TestCases.md составляем тест-кейсы по заданной функции. Например

task_ut/TestCases.md:

# Тест-кейсы

## 1. Sum 2 and 3 eq 5

Входные данные: `a = 2`; `b = 3`.

Ожидаемый резульат: `c = 5`.

## 2. Sum 2 and 3 neq 1337

Входные данные: `a = 2`; `b = 3`.

Ожидаемый резульат: `c != 1337`.

3. Реализовать unit-тесты

В файле task_ut/ut.cpp реализуем unit-тесты. Каждый тест-кейс пишется в блоке

TEST(<название тест-кейса>)
{
    <реализация тест-кейса>
}

ASSERT_EQ(expected, actual) - макрос для утверждения, что два значения равны. Этот макрос сравнивает ожидаемое и фактическое значения. Если они не равны, то выбрасывается исключение runtime_error с соответствующим сообщением об ошибке.

  • expected - ожидаемое значение.
  • actual - фактическое значение.

ASSERT_NE(expected, actual) - макрос для утверждения, что два значения не равны. Этот макрос сравнивает ожидаемое и фактическое значения. Если они равны, то выбрасывается исключение runtime_error с соответствующим сообщением об ошибке.

  • expected - ожидаемое значение.
  • actual - фактическое значение.

Например

task_ut/ut.cpp:

#include <task.hpp>

#include "simple_ut/simple_ut.h"

TEST(/* test name */)
{
    /* test case */
}

int main(int argc, char* argv[])
{
    return run_all_tests();
}

должно превратиться в

#include <task.hpp>

#include "simple_ut/simple_ut.h"

// Тест-кейс "Sum 2 and 3 eq 5"
TEST(Sum_2_and_3_eq_5)
{
    int c = sum(2, 3);
    ASSERT_EQ(5, c);
}

// Тест-кейс "Sum 2 and 3 neq 1337"
TEST(Sum_2_and_3_neq_1337)
{
    int c = sum(2, 3);
    ASSERT_NE(1337, c);
}

int main(int argc, char* argv[])
{
    return run_all_tests();
}

4. Собрать проект и запустить тесты

Для сборки и запуска проекта необходимо запустить заранее составленные скрипты из командной строки.

Windows:

  • Сборка
build.cmd
  • Запуск
run.cmd

Linux:

  • Сборка
sh build.sh
  • Запуск
sh run.sh

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.