我是单元测试的新手,我有以下非常基本的程序:
#include "stdafx.h"
// classes example
#include <iostream>
using namespace std;
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
bool isEq ();
};
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
bool CRectangle::isEq () {
if(x==y)
{
return true;
}
else
{
return false;
}
}
int main () {
CRectangle rect;
rect.set_values (3,3);
cout << "area: " << rect.area();
cout << " isEq: " << rect.isEq() << " \n";
return 0;
}
我想知道如何测试方法isEq?我想要100%的代码覆盖此方法,我想使用Boost测试框架。有任何想法吗?我正在使用VS 2009 SP1,我将构建和运行什么?我对单元测试非常困惑。
更新
感谢斯图尔特,然而我所做的仍然没有意义。我知道以下代码具有以下文件名:
//FILENAME: test.cpp
#include "stdafx.h"
#define BOOST_TEST_MODULE isEq Test
#include <boost/test/included/unit_test.hpp>
#include "CRectangle.h"
BOOST_AUTO_TEST_CASE(isEq_test)
{
CRectangle rect;
rect.set_values(5,5);
BOOST_CHECK_EQUAL(rect.isEq(), true);
rect.set_values(23,9);
BOOST_CHECK_EQUAL(rect.isEq(), false);
}
// FILENAME: CRectangle.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "CRectangle.h"
//#include <boost/test/included/unit_test.hpp>
// classes example
#include <iostream>
using namespace std;
void CRectangle::set_values (int a, int b) {
x = a;
y = b;
}
bool CRectangle::isEq () {
if(x==y)
{
return true;
}
else
{
return false;
}
}
int main () {
CRectangle rect;
rect.set_values (3,3);
cout << "area: " << rect.area();
cout << " isEq: " << rect.isEq() << " \n";
return 0;
}
//FILENAME: CRectangle.h
//void CRectangle::set_values (int a, int b);
//bool CRectangle::isEq ();
#ifndef CRECTANGLE_H
#define CRECTANGLE_H
class CRectangle {
int x, y;
public:
void set_values (int,int);
int area () {return (x*y);}
bool isEq ();
};
#endif
// FILENAME: stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#ifdef _UT
#define ut_private public
#define ut_protected public
#else
#define ut_private private
#define ut_protected protected
#endif
我想提醒您,我正在使用Visual Studio 2008 SP1(将此项目作为win32控制台应用程序运行)。每当我构建以下文件时,它都会给我带来错误。我也不确定Boost lib应该如何给我测试结果?是否会打开一个新窗口?究竟会发生什么?
答案 0 :(得分:4)
测试它的最简单方法是做这样的事情(我不是要写出很好的测试用例,我会把它留给你):
#define BOOST_TEST_MODULE isEq Test
#include <boost/test/included/unit_test.hpp>
#include "CRectangle.h"
BOOST_AUTO_TEST_CASE(isEq_test)
{
CRectangle rect;
rect.set_values(5,5);
BOOST_CHECK_EQUAL(rect.isEq(), true);
rect.set_values(23,9);
BOOST_CHECK_EQUAL(rect.isEq(), false);
}
如果您这样做,则无需构建Boost.Test,只需包含标题即可。希望有所帮助!
P.S。作为旁注,你可能想为你的函数选择一个命名方案并坚持下去 - 让set_values
和isEq
看起来有点不一致,因为它的价值......
答案 1 :(得分:2)
继续回答:
需要导出源文件中的类和函数,以便它们可以在单元测试文件中使用,如下所示:
//CRectangle.h
#define DLLEXPORT __declspec(dllexport)
class DLLEXPORT CRectangle
{
...
}
// CRectangle.cpp
void DLLEXPORT CRectangle::set_values (int a, int b)
{
...
}
bool DLLEXPORT CRectangle::isEq ()
{
..
}
编译CRectangle source.lib。
最后将Unit Test程序与source.lib链接,包括“CRectangle.h”并调用 CRectangle中的函数。
希望这会有所帮助..