这是我所拥有的几个问题的第一部分,在不同的主题中分开。
首先,当我创建一个要在其他程序中使用的类时,我应该在哪里放置我的测试代码。如果我的类将被其他文件使用,我应该使用单独的文件还是在同一个文件中测试我的类?
例如:我创建了一个类Token,它在Token.h中声明并在Token.cpp中实现但是在我测试以确保一切正常时我可以在Token.cpp中使用main()方法或者当我想稍后使用令牌时会导致问题吗?如果不在Token.cpp中,我假设我将使用像Token_Test.cpp这样的单独文件进行测试?或者我想我可以使用main()在Token中进行测试,然后在我确信它可以按预期工作后再注释掉它?
由于
答案 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();
}