如何正确测试类

时间:2014-09-23 16:53:37

标签: c++ class testing

这是我所拥有的几个问题的第一部分,在不同的主题中分开。

首先,当我创建一个要在其他程序中使用的类时,我应该在哪里放置我的测试代码。如果我的类将被其他文件使用,我应该使用单独的文件还是在同一个文件中测试我的类?

例如:我创建了一个类Token,它在Token.h中声明并在Token.cpp中实现但是在我测试以确保一切正常时我可以在Token.cpp中使用main()方法或者当我想稍后使用令牌时会导致问题吗?如果不在Token.cpp中,我假设我将使用像Token_Test.cpp这样的单独文件进行测试?或者我想我可以使用main()在Token中进行测试,然后在我确信它可以按预期工作后再注释掉它?

由于

3 个答案:

答案 0 :(得分:1)

尽可能将代码与测试分开。理想情况下,测试不应该干扰您的代码,但这并不总是可行。

答案 1 :(得分:0)

这可能是Unit Test的一个很好的候选者,它几乎总是一个完全独立的可执行文件。我使用CPPUnit框架获得了非常好的结果。

随着您的软件变得更加复杂(即更多类等),单元测试可以帮助您保持非常稳定且易于维护的状态。它们肯定不是解决所有已知问题的灵丹妙药,但它们将有助于确保每个类按预期工作。

答案 2 :(得分:0)

您肯定希望您的测试代码与您测试的代码分开。您并不希望测试中的代码对测试代码有任何依赖性。

在任何大小的项目中,您可能希望在单独的程序集/库中使用unit testing framework编写测试,但是对于足够小的项目,您可以考虑通过将命令行参数传递给您来运行所有测试主功能。这是一个荒谬的简单例子:

<强> Greeting.h:

#pragma once
#include <string>

std::string getGreeting();

<强> Greeting.cpp:

#include "Greeting.h"

std::string getGreeting() {
  return "Hello world!";
}

<强> Test.h:

#pragma once
void test();

<强> Test.cpp的:

#include "Test.h"
#include "Greeting.h"

#include <cassert>
#include <iostream>

void test() {
  auto greeting = getGreeting();
  assert(greeting == "Hello world!");
  std::cout << "Test passes!\n";
}

<强> main.cpp中:

#include "Test.h"
#include "Greeting.h"

#include <iostream>

void run() {
  std::cout << getGreeting() << "\n";
}

int main(int argc, char *argv[]) {
  if (argc > 1 && strcmp(argv[1], "-t") == 0)
    test();
  else
    run();
}

Live demo