[讨论]是否将单元测试文件和源文件放在一起

目前根据习惯和创作时间,单元测试和源文件的代码都是分开的。

engine/
  classes/
    Elgg/
      Class.php
  tests/
    phpunit/
      Elgg/
        ClassTest.php

是否可以考虑将它们放在一起:

engine/
  classes/
    Elgg/
      Class.php
      ClassTest.php

好处:

  • 可以很清晰地知道哪些文件缺少测试。
  • 可以快速在源文件和单元测试文件之间跳转,而不需要切换文件夹。
  • 遵循了需要一起修改的代码放在一起的原则,方便修改源码时同步修改单元测试文件。
  • 在移动、拷贝源码时可以轻松地同时处理单元测试代码。

坏处:

  • 将单元测试代码也作为源码处理,有些工具会出现问题,比如有些 IDE 会将单元测试里的代码提示出来。
  • 很少有其它项目这么做。
  • 在搜索源码时必须过滤单元测试的代码。
  • 似乎仅仅为了切换文件方便而增加了其它很多的工作量。
  • 如果单元测试和源码不是一一对应则不容易处理。

结论:

  不要这么做。

参考链接

https://github.com/Elgg/Elgg/issues/7112

http://stackoverflow.com/questions/23990358/keeping-unit-tests-in-separate-files-in-d/24018009

时间: 2024-10-11 18:22:19

[讨论]是否将单元测试文件和源文件放在一起的相关文章

理解C++中的头文件和源文件的作用【转】

一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C++的源代码.C+ +语言支持"分别编译"(separatecompilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里..cpp文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做

C++学习笔记(一):头文件和源文件

说明: 当一个源文件(a.cpp)要调用另一个源文件(b.cpp)定义的方法时,需要在a.cpp中写上这个方法的声明(只需要该方法的名称.返回值和参数,类似Java的接口): 如果每次调用其他文件的方法时都写上相同的声明就会很麻烦,而且当b.cpp的定义修改时所有调用到该文件的声明都要修改,这样工作量太大且容易出错,所以出现了头文件,我们把所有的声明都存放到头文件中,需要使用到的时候使用宏命令“#include”包含进这个.cpp文件中即可: #include:只有一个功能:把它后面所写的那个文

C++中的头文件和源文件

一.C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C++的源代码.C+ +语言支持“分别编译”(separate compilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里..cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链

第二十一章 C++中的头文件和源文件

一.C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C++的源代码.C+ +语言支持“分别编译”(separate compilation).也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里..cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链

C语言中,头文件和源文件的关系(转)

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为单位进行的,也就是

c/c++中头文件和源文件的关系

.h为头文件,.c/.cpp为源文件 首先: .h中一般放的是同名.c文件中定义的变量.数组.函数的声明,需要让.c外部使用的声明,一般只有声名,而具体的实现放在源文件中. 要将a.cpp和a.h对应起来,就必须在a.cpp中写上#include"a.h",这样编译器才会把a.h和a.cpp两个文件绑定在一起. 其次: 要了解细节的东西,我们先要清楚译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成

c语言头文件和源文件不在同一个目录

http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088688.html 从工程上讲,头文件的文件名应该与对应的源文件名相同便于维护,如果头文件中包含了多个源文件中的定义或声明,则应该按源文件分组布局头文件中的代码,并且通过注释注明每组所在的源文件.当一个工程的文件较多时应该将源文件与头文件分开目录存放,一般头文件存放在include或inc目录下,而源文件存放在source或src目录下,根据经验,一个工程的文件数超过30个时应该将源文

C++中头文件(.h)和源文件(.cpp)都应该写些什么

头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下): #ifndef CIRCLE_H #define CIRCLE_H //你的代码写在这里 #endif 这样做是为了防止重复编译,不这样做就有可能出错. 至于CIRCLE_H这个名字实际上是无所谓的,你叫什么都行,只要符合规范都行.原则上来说,非常建议把它写成这种形式,因为比较容易和头文件的名字对

git小技巧--如何从其他分支merge个别文件或文件夹

在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发. 创建分支 功能分为2个分支,分别为A.B. A上面有个列表页功能 B上面有个详情页功能,还有个系统消息功能 产品经理说先上列表功能,于是我们就开发A分支,列表功能很快开发完成. 第二天按常理开发B分支,开发到一半,产品经理说目前的系统消息功能需要急着上线,要和列表功能一起上线,当时就懵逼了,然后赶紧放下详情页的开发,立马去开发系统消息功能,开发完之后需要将列表功能和系统消息功能