小编ald*_*nor的帖子

使py.test,coverage和tox一起工作:__ init__.py在tests文件夹中?

我有一个奇怪的问题tox,py.test,coveragepytest-cov:当py.test--cov选项是从启动tox,这似乎需要__init__.py的文件tests是不会立即明显的文件夹.

在撰写这篇文章时,我通​​过添加上述内容解决了最初的问题tests/__init__.py,但到目前为止我还没有完全理解为什么它确实有效或无效,所以我仍然在寻求帮助.请参阅下面的详细信息.

我在SO上找到了一个相关的问题,但它只会让它更加混乱,因为答案似乎与我到目前为止所得到的相反: `py.test`和`__init __.py`文件

另请参阅此处的官方文档:py.test - 良好的集成实践(页面底部).


简化的项目结构:

setup.py
tox.ini
.coveragerc
project/
    __init__.py
    module1.py
    module2.py
    tests/
        __init__.py (optional, an empty file)
        test_module1.py
        test_module2.py
Run Code Online (Sandbox Code Playgroud)

相关部分tox.ini:

[testenv:check]
commands = py.test --cov=project --cov-report=term
deps =
    pytest
    coverage
    pytest-cov

[pytest]
python_files = test_*.py
norecursedirs = .tox
Run Code Online (Sandbox Code Playgroud)

相关部分.coveragerc:

[run]
branch = True
omit = project/tests/*
Run Code Online (Sandbox Code Playgroud)

现在,结果如下:

  • py.test --cov=project …

python code-coverage coverage.py pytest tox

25
推荐指数
1
解决办法
8956
查看次数

lcov 将带有函数声明的行标记为可达但未覆盖

我正在尝试使用 lcov(v1.13,在 OS X 上,使用 clang 作为编译器)为我的测试套件生成代码覆盖率,但我遇到了一个恼人的问题,我不知道如何解决。SO 上有几个类似的问题,但我找不到这个问题的解决方案。由于某种原因,函数/成员声明被标记为可访问但未执行,类似于下面的示例(这是标头中的内联方法定义):

在此输入图像描述

这使得行覆盖率指标毫无用处,因此我希望有一种方法可以修复它,而无需将每个声明标记为 LCOV_EXCL_LINE。

使用的编译器标志非常标准:

-g -O0 -fno-inline -ftest-coverage -fprofile-arcs -fno-elide-constructors
Run Code Online (Sandbox Code Playgroud)

奇怪的是,源文件中的方法定义也标记为红色,尽管主体不是,例如:

// header.h
class Foo { 
    void bar();      // ignored, marked as unreachable
}  

// header.cpp
void Foo::bar() {    // marked as red (reachable / not executed)
    do_something();  // marked as covered
}
Run Code Online (Sandbox Code Playgroud)

如果有任何重要性的话,源文件是静态库的一部分,该静态库静态链接到 CMake 中的测试工具。

c++ code-coverage clang gcov lcov

6
推荐指数
1
解决办法
2394
查看次数

如何编写区分signed和unsigned int的泛型函数?

我想知道是否有可能区分Rust中的signed和unsigned int.在std::num我们Int,UnsignedInt : IntSignedInt : Int + Neg,所以这两个是不是相互排斥的.

在最简单的情况下,是否可以编写一个简单的函数fn<T: Int>is_signed(value: T) -> bool,当传递有符号的值时它会返回true(例如i32)?有没有更好的方法呢?

编辑以响应下面的评论:一个真实世界的例子是包装一个C FFI,其中返回有符号整数类型的函数通过返回a -1指示错误而返回uint的函数通过返回指示错误0(这,加上它让我感兴趣的是什么是在Rust中这样做的惯用方法).

traits rust

5
推荐指数
1
解决办法
693
查看次数

带有区别联合和可选<>的好奇段错误

我想知道在这个简单的例子中使用std :: experimental :: optional和union类型可能导致段错误的原因.令人好奇的是,clang和gcc都发生了段错误,但在两个不同的地方.

我也对从下面的日志中看到的大量复制和破坏行为感到困惑,想知道是否有更好/惯用的方法来避免这么多显然多余的操作?在这种情况下,假设这里的所有对象都是按值传递和访问的,那么将所有构造函数切换为rvalue引用并使用std :: move到处都有帮助吗?

#include <iostream>
#include <vector>

// https://github.com/akrzemi1/Optional
#include "Optional/optional.hpp"

using std::cout;
using std::vector;
using std::experimental::optional;

struct X {
    int y;

    X(int y) : y(y) { cout << "X::X(int)\n"; }
    X(const X& x) : y(x.y) { cout << "X::X(const X&)\n"; }
    ~X() noexcept { cout << "X::~X()\n"; }
};

struct A {
    vector<X> x;

    A(const vector<X>& x) : x(x) { cout << "A::A(const vector<X>&)\n"; }
    A(const A& a) : x(a.x) { cout << "A::A(const …
Run Code Online (Sandbox Code Playgroud)

c++ constructor copy-constructor segmentation-fault c++11

4
推荐指数
1
解决办法
198
查看次数