Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在相应的类中存储测试用例可以吗?(C+;+;)_C++_Unit Testing - Fatal编程技术网

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”是我不推荐的方式,但我已经看到了。