c++单元测试与Visual Studio测试框架
C++ unit testing with Visual Studio test framework
我在为我实现的队列类设置示例测试时遇到了一些问题。
下面是队列类:
Queue.h:
typedef float QueueInfoType;
QueueInfoType x;
class Queue
{
public:
Queue(){front = rear = count = 0;}
bool isEmpty();
bool isFull();
void add(QueueInfoType x);
float remove();
int numItems();
enum {MAXQUEUE = 80};
private:
QueueInfoType values[MAXQUEUE];
int front, rear, count;
};
Queue.cpp:
bool Queue::isEmpty()
{
return front == rear;
}
bool Queue::isFull()
{
return count >= MAXQUEUE;
}
void Queue::add(QueueInfoType x)
{
values[rear = (rear + 1) % MAXQUEUE] = x;
count = count + 1;
}
float Queue::remove()
{
count = count - 1;
return x = values[front = (front + 1) % MAXQUEUE];
}
int Queue::numItems()
{
return count;
}
测试方法: [TestMethod]
void TestNumItems()
{
Queue q;
for(int i = 0; i < 20; i++)
{
q.add(i);
}
int expected = 2;
int actual = q.numItems();
Assert::AreEqual(expected, actual, "queue had: " + actual + " items");
};
我显然遗漏了一些东西,当我调用add方法向队列添加项目时,队列的计数从未增加,但是项目被添加到队列中。
我正在一个静态库中编译我的队列类,并在我的测试项目中添加对它的引用。
知道为什么我的队列计数永远不会改变吗?
编辑:我正在用这个类创建一个循环队列,它具有MAXQUEUE定义的最大条目数。
以上就是QueueInfoType的定义。
注意:
当我将静态库更改为可执行文件并将void main()
添加到我的queue.cpp并编写代码来测试队列的功能时,它工作得很好并且计数返回正确。当它被测试项目用作静态库时,是否会发生一些事情?
我想你的期望应该是"20"。
此外,remove返回一个"float",但这应该是一个QueueInfoType。
我运行了测试,它工作得很好(除了测试20 vs 2)。我的测试实际是20。
我不确定,但队列类必须使用指针实现,所以没有大小限制,您可以在add函数中使用类似的东西:
void Queue::add(QueueInfoType x)
{
count++;
values[count] = x;
}
所以实现更容易理解,关于你的错误…我找不到它,它可能有用……我将继续思考。
PD: sorry about my english
尝试将测试例程中的for循环更改为:
for(int i = 0; i < 20; i++)
{
q.add(i + 100);
}
如果你最终得到一个不同的数字,那么这是因为你不小心超出了数组的边界,损坏了堆栈。由于变量的定义方式不同,它们可能最终成为堆栈上的邻居。
相关文章:
- GoogleMock是否仍然打算与任何测试框架一起使用?
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 如何在自动工具C++中添加提升单元测试框架
- 如何在Qt测试框架中对信号进行基准测试?
- 如何使用Boost单元测试框架测试Qt应用程序
- 在 Linux 上构建 cpptest 单元测试框架
- 使用C 单元测试框架集成测试Java应用程序
- Visual Studio 2017 C 本地单元测试框架不起作用
- 在Google测试框架中,如何期望函数调用或其他功能调用
- 每次捕获测试框架较长的链接时间
- C 单元测试框架具有类型和值参数化
- CMAKE Boost 单元测试框架在 Mac 上不起作用
- 由 Boost 单元测试框架 dll 导出的 std::basic_ostringstream 会导致"already defined symbol"错误
- Visual Studio 2012 的新C++单元测试框架是可移植的吗?
- 通过动态链接和手动设置增强单元测试框架
- 带有OpenGL和嵌入式WebViews的本机移动应用程序(iOS/Android)的测试框架
- 在 Google 的C++测试框架中为多个单元测试创建一个二进制文件
- 从谷歌测试框架中的另一个测试执行测试
- Google 测试框架 - 测试用例之间的依赖关系