Scala有哪些可用的代码覆盖率工具?
我有Scala规范测试和Hudson持续集成设置.有什么东西可以挂钩到这个设置来测量和跟踪代码覆盖率?
continuous-integration unit-testing scala code-coverage hudson
我正在使用gcov测量我的C++代码中的覆盖率.我希望得到100%的覆盖率,但是由于存在一些理论上无法触及的代码行(需要实现但从未调用过的方法,switch语句的默认分支等等)而受到阻碍).这些分支中的每一个都包含一个assert( false );语句,但是gcov仍然将它们标记为未命中.
我希望能够告诉gcov忽略这些分支.有没有办法给gcov这些信息 - 通过注释源代码或任何其他机制?
您的单元测试是否构成100%的代码覆盖率?是或否,为什么或为什么不呢.
我是一个有python单元测试的新手,尤其是coverage.py.覆盖报告是否包含实际测试文件的覆盖范围是否可取?
以下是我的HTML报告的屏幕截图作为示例.
您可以看到该报告包含tests/test_credit_card.起初我试图tests/从报告中省略目录,如下所示:
coverage html --omit=tests/ -d tests/coverage
Run Code Online (Sandbox Code Playgroud)
我尝试了该命令的几种变体,但我不能为我的生活得到测试/排除.在接受失败后,我开始怀疑是否应该将测试文件包含在报告中.
任何人都可以对此有所了解吗?
你有变异测试的现实应用的例子吗?它比简单的测试覆盖工具更好吗?还是没用?
在现实世界中,突变测试有哪些优点/缺点?
给定软件......
...我喜欢编写每个子系统或组件的自动化测试.
我没有为组件的每个内部类编写测试(因为每个类都有助于组件的公共功能,因此可以通过组件的公共API从外部测试/测试).
当我重构组件的实现时(我经常这样做,作为添加新功能的一部分),因此我不需要改变任何现有的自动化测试:因为测试仅依赖于组件的公共API和公共API通常是扩大而不是改变.
我认为这个政策与重构测试代码这样的文件形成了鲜明的对比,后者说...
...所有这些我认为我不同意(或至少不练习).
我的问题是,如果你不同意我的政策,你会解释原因吗?在什么情况下这种测试程度不足?
综上所述:
脚注:我的一些"测试用例"实际上是作为数据实现的.例如,UI的测试用例包含数据文件,其中包含各种用户输入和相应的预期系统输出.测试系统意味着拥有测试代码,该代码读取每个数据文件,将输入重放到系统中,并断言它获得相应的预期输出.
虽然我很少需要更改测试代码(因为公共API通常是添加而不是更改),但我发现有时候(例如每周两次)需要更改一些现有的数据文件.当我更好地更改系统输出(即新功能改进现有输出)时可能会发生这种情况,这可能导致现有测试"失败"(因为测试代码只会尝试断言输出没有改变).要处理这些情况,我会执行以下操作:
脚注:通过"组件",我的意思是"一个DLL"或"一个组件"...这个大到足以在系统的体系结构或部署图上可见,通常使用数十个或100个类实现,以及因此与公共API只包含约1或接口少数......一些可能被分配到的开发商之一的团队(其中不同的组件被分配到不同的团队),并且将根据康威定律有一个相对稳定的公共API.
脚注:文章面向对象测试:神话与现实说,
神话:黑盒测试就足够了. 如果您使用类接口或规范仔细测试测试用例设计,则可以确保该类已经完全运用.白盒测试(查看方法的实现来设计测试)违反了封装的概念.
现实:OO结构很重要,第二部分.许多研究表明,开发人员认为黑盒测试套件非常彻底,只能在测试实施中使用三分之一到一半的语句(更不用说路径或状态)了.这有三个原因.首先,选择的输入或状态通常执行正常路径,但不强制所有可能的路径/状态.其次,单独的黑盒测试无法揭示惊喜.假设我们已经测试了被测系统的所有指定行为.为了确信没有未指明的行为,我们需要知道系统的任何部分是否未被黑盒测试套件执行.获取此信息的唯一方法是通过代码检测.第三,通常很难在不检查源代码的情况下执行异常和错误处理.
我应该补充一点,我正在进行白盒功能测试:我看到了代码(在实现中),我编写了功能测试(驱动公共API)来练习各种代码分支(功能实现的细节).
refactoring integration-testing automated-tests unit-testing code-coverage
我正在运行EclEmma,Eclipse的Emma插件,并且覆盖率报告仅显示我定义的Enum的部分覆盖,即使它显示Enum中唯一的值被覆盖.我假设支持Enum的隐含方法存在覆盖差距,但我不太确定.
例如,使用此Enum,EclEmma会以绿色突出显示所有内容,但包声明除外:
package com.blah;
public enum UserRole {
HAS_ACCESS
}
Run Code Online (Sandbox Code Playgroud)
如果我提取课程的覆盖范围详细信息,我会看到:

我的问题是,使用EclEmma在我的Enum课程上获得100%覆盖率的最佳方法是什么?
当我使用gcov来测量C++代码的测试覆盖率时,它会在析构函数中报告分支.
struct Foo
{
virtual ~Foo()
{
}
};
int main (int argc, char* argv[])
{
Foo f;
}
Run Code Online (Sandbox Code Playgroud)
当我运行gcov并启用分支概率(-b)时,我得到以下输出.
$ gcov /home/epronk/src/lcov-1.9/example/example.gcda -o /home/epronk/src/lcov-1.9/example -b
File 'example.cpp'
Lines executed:100.00% of 6
Branches executed:100.00% of 2
Taken at least once:50.00% of 2
Calls executed:40.00% of 5
example.cpp:creating 'example.cpp.gcov'
Run Code Online (Sandbox Code Playgroud)
困扰我的部分是"至少采取一次:50%的2".
生成的.gcov文件提供了更多详细信息.
$ cat example.cpp.gcov | c++filt
-: 0:Source:example.cpp
-: 0:Graph:/home/epronk/src/lcov-1.9/example/example.gcno
-: 0:Data:/home/epronk/src/lcov-1.9/example/example.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:struct Foo
function Foo::Foo() called 1 returned 100% blocks executed 100%
1: 2:{
function …Run Code Online (Sandbox Code Playgroud) 我正在使用ember-cli-code- cover与ember-cli-mocha.当我运行时,COVERAGE=true ember test我的语句,函数和行的覆盖率为0%.然而,我的测试涵盖了这些部分.我在设置中遗漏了什么?
单元测试文件:
beforeEach(function() {
controller = this.subject();
});
it('sets selectedImage to null', function() {
expect(controller.get('selectedImage')).to.eql(null);
});
describe('setCoverageTest', function() {
it('sets selectedImage to true', function() {
expect(controller.get('selectedImage')).to.eql(null);
controller.setCoverageTest();
expect(controller.get('selectedImage')).to.be.true;
});
});
Run Code Online (Sandbox Code Playgroud)
配置/ coverage.js:
module.exports = {
excludes: ['*/templates/**/*'],
useBabelInstrumenter: true
};
Run Code Online (Sandbox Code Playgroud) 是否有适用于PHP的代码覆盖工具?我希望检查我的代码和用PHP编写的API的代码覆盖率,但是我无法掌握PHP的任何代码覆盖工具,因为它更像是服务器端语言和动态性质.
有谁知道可以执行PHP代码覆盖的方法?
code-coverage ×10
unit-testing ×4
c++ ×2
gcov ×2
testing ×2
coverage.py ×1
eclipse ×1
ember-cli ×1
ember.js ×1
emma ×1
gcc ×1
hudson ×1
java ×1
php ×1
python ×1
refactoring ×1
scala ×1