C++ 在相应的类中存储测试用例可以吗?(C+;+;)
我已经开始在我想要测试的类中以静态函数的形式编写测试。这些函数通常测试功能,它们创建大量对象,测量内存消耗(检测泄漏),等等C++ 在相应的类中存储测试用例可以吗?(C+;+;),c++,unit-testing,C++,Unit Testing,我已经开始在我想要测试的类中以静态函数的形式编写测试。这些函数通常测试功能,它们创建大量对象,测量内存消耗(检测泄漏),等等 这是好的还是坏的做法?从长远来看,它会影响我吗?不,你应该改为写。我将它们分开,因为我不希望测试类包含在可部署的工件中。增加.exe的大小或使其可供客户端使用毫无意义 我建议使用编写单元测试。我认为这不是最佳实践,但它“没问题”,因为它不会破坏程序或导致程序崩溃。有很多事情可以做,但你不应该做。这是一种糟糕的做法 您应该有一个单独的类来测试您正在创建的类。您这样做的方式是
这是好的还是坏的做法?从长远来看,它会影响我吗?不,你应该改为写。我将它们分开,因为我不希望测试类包含在可部署的工件中。增加.exe的大小或使其可供客户端使用毫无意义
我建议使用编写单元测试。我认为这不是最佳实践,但它“没问题”,因为它不会破坏程序或导致程序崩溃。有很多事情可以做,但你不应该做。这是一种糟糕的做法 您应该有一个单独的类来测试您正在创建的类。您这样做的方式是用测试代码填充生产代码。这不是你应该做的 测试类Foo的方法如下:
//Foo.cpp
class Foo {
public:
int GetInt() { return 15; }
};
//FooTest.cpp
TEST(FooTest, testGetIntShouldReturn15) {
Foo foo;
ASSERT_EQUAL(15, foo.GetInt());
}
测试代码在所有权、部署、非功能性需求等方面与生产代码有着根本的不同。因此,最好将其与正在测试的代码分开,放在单独的文件中,甚至可能放在单独的目录中 为了便于对被测类进行白盒单元测试,通常需要将测试类/测试函数声明为friend。有些类只能和公共成员进行单元测试,所以添加好友并不总是必要的 将测试代码和测试中的代码结合起来很简单:您只需在同一个项目中将目标文件链接在一起
有时,您可以看到单元测试代码包含被测代码,但我建议您不要这样做-例如,如果您有测试覆盖率度量工具(强烈建议!),那么这些度量对于被测代码来说是不正确的。如果您的类中有测试用例,很难有固定装置之类的东西
我也要向你大声呼喊。学习曲线有点高,但一旦你习惯了它,它就会令人惊讶。“有时你会看到单元测试代码#包括测试中的代码,但我建议你不要这样做”那么你将如何在单元测试中使用该类?@Edison:就像你会使用在同一编译单元中定义的任何其他类一样。从某种意义上说,这就像让被测试的类和测试类在同一个源文件中,但作为单独的类。我同意让它们作为单独的类,但我不明白如何在FooTest.cpp中测试Foo.cpp,因为它们在不同的文件中。因此,在我的“FooTest.cpp”中,我需要包含“Foo.h”来测试Foo是的,这是更好的方法#在FooTest.cpp中包含“Foo.cpp”是我不推荐的方式,但我已经看到了。