Модульное тестирование означает написание кода, который проверяет отдельные части или блоки приложения или библиотеки. Единица - это самая маленькая тестируемая часть приложения. Модульные тесты оценивают код изолированно. В C ++ это означает написание тестов для методов или функций. Я пишу калькулятор для базового c и пытаюсь использовать CPPUnitTest для тестирования кода в Visual Studio 2019. После этого мне также нужно создать его в Jenkins. Пожалуйста, не судите .. Я пишу модульный тест в первый раз ... это мой калькулятор. cpp
#include <iostream>
#include "Calc.h"
using namespace std;
int main()
{
Calc obj;
float a, b;
cin >> a >> b;
int menu;
cout << "Enter what operation you want(1-4);" << endl;
cout << "1. Addition" << endl;
cout << "2. Subtraction" << endl;
cout << "3. Multiplication" << endl;
cout << "4. Division" << endl;
cin >> menu;
switch (menu)
{
case 1:obj.add(a, b);
break;
case 2:obj.sub(a, b);
break;
case 3:obj.multiply(a, b);
break;
case 4:
try
{
obj.divide(a, b);
}
catch (std::runtime_error& e)
{
cout << e.what() << "\n";
}
break;
default:
{
cout << "Invalid input" << endl;
}
}
}
Это класс Cal c или "Cal c .h "Здесь я использовал std::runtime_error
, чтобы выдать ошибку при делении на ноль
#pragma once
#include <stdexcept>
class Calc {
public:
float add(float a, float b)
{
return a + b;
}
float sub(float a, float b) {
return a - b;
}
float multiply(float a, float b) {
return a * b;
}
float divide(float a, float b) {
if (b == 0)
{
throw std::runtime_error("Division by zero condition!");
}
return a / b;
}
};
Я пытаюсь написать модульный тест, используя CPPUnitTest для моего кода. Я написал код для сложения и вычитания, используя assert::AreEqual
, но для деления на нулевое условие я не знаю, чтобы написать контрольный пример. это мой код модульного теста.
#include "pch.h"
#include "CppUnitTest.h"
#include "../Calculator/Calc.h"
#include <stdexcept>
using namespace std;
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace CalculatorTest
{
TEST_CLASS(CalculatorTest)
{
public:
Calc cal;
TEST_METHOD(AddTest)
{
float k = cal.add(3, 4);
Assert::AreEqual(7.0f,k);
}
TEST_METHOD(SubTest)
{
float k = cal.sub(3, 4);
Assert::AreNotEqual(-2.0f, k);
}
TEST_METHOD(DivByZeroTest)
{
//what should I write here
}
};
}
Пожалуйста, помогите мне написать метод теста для этого. Где-то я читал CPPUNIT_ASSERT_THROW(cal->divide(12,0), std::runtime_error);
, но в моем случае это не работает. Как я могу сделать Assert::AreEqual
Также предложите, какой еще метод я могу использовать для увеличения покрытия кода.