在 Visual Studio 2019 C++ 中使用 CPPUnitTest 编写 "DivideByZero" 单元测试用例时出现问题
Problem in writing "DivideByZero" Unit test case using CPPUnitTest in Visual Studio 2019 C++
单元测试意味着编写代码来验证应用程序或库的各个部分或单元。单元是应用程序中最小的可测试部分。单元测试孤立地评估代码。在 C++ 中,这意味着为方法或函数编写测试。
我正在编写一个基本的计算器程序,并尝试使用 CPPUnitTest 来测试 Visual studio 2019.After 中的代码,我也必须在 Jenkins 中构建它。
请不要判断..我是第一次写单元测试..
这是我的 Calculator.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;
}
}
}
这是 class 计算器或 "Calc.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
还建议我可以使用哪种其他方法来增加我的代码覆盖率。
检查异常时不应使用 assert::AreEqual
。
您可以将异常抛出代码包装在 lambda 中并将其传递给 Assert::ExpectException<std::runtime_error>
,如果抛出预期的异常,它应该断言 true
:
TEST_METHOD(DivByZeroTest)
{
auto func = [] { return cal.divide(1.f, 0.f); };
Assert::ExpectException<std::runtime_error>(func);
}
我希望它在内部做这样的事情::
bool result = false;
try {
func();
} catch(const std::runtime_error&) {
result = true;
} catch(...) {
}
return result;
单元测试意味着编写代码来验证应用程序或库的各个部分或单元。单元是应用程序中最小的可测试部分。单元测试孤立地评估代码。在 C++ 中,这意味着为方法或函数编写测试。 我正在编写一个基本的计算器程序,并尝试使用 CPPUnitTest 来测试 Visual studio 2019.After 中的代码,我也必须在 Jenkins 中构建它。 请不要判断..我是第一次写单元测试.. 这是我的 Calculator.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;
}
}
}
这是 class 计算器或 "Calc.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
还建议我可以使用哪种其他方法来增加我的代码覆盖率。
检查异常时不应使用 assert::AreEqual
。
您可以将异常抛出代码包装在 lambda 中并将其传递给 Assert::ExpectException<std::runtime_error>
,如果抛出预期的异常,它应该断言 true
:
TEST_METHOD(DivByZeroTest)
{
auto func = [] { return cal.divide(1.f, 0.f); };
Assert::ExpectException<std::runtime_error>(func);
}
我希望它在内部做这样的事情::
bool result = false;
try {
func();
} catch(const std::runtime_error&) {
result = true;
} catch(...) {
}
return result;