小编Jat*_*mir的帖子

从 __getattr__ 方法检索的模拟函数

我正在自动化一些存储库操作,并使用GitPython来完成这项工作。让我们简化一下事情,假设我想断言我的函数是否调用了pull存储库上的方法。代码如下:

from pytest_mock import MockFixture
from git import Git, Repo

repo = Repo('/Users/Jatimir/path/to/repo')

def pull() -> None:
    repo.git.pull()
Run Code Online (Sandbox Code Playgroud)

但是,我注意到该类Git有些特殊并且没有实现pull. 相反,它将所有流量“委托”给__getattr__使用另一种方法来完成这项工作。

def __getattr__(self, name):
    ...
    return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我的问题是如何进行测试?我将pytestpytest-mock一起使用,它提供了一个mocker固定装置,以下是我的尝试:

def test_pull1(mocker: MockFixture) -> None:
    pull_mock = mocker.MagicMock(name='pull')
    getattr_mock = mocker.MagicMock(name='__getattr__', return_value=pull_mock)

    mocker.patch.object(Git, '__getattr__', getattr_mock)
    pull()
    pull_mock.assert_called_once_with()


def test_pull2(mocker: MockFixture) -> None:
    pull_mock = mocker.Mock(name='pull')

    def __getattr__(self, name):
        if name == 'pull': …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking pytest python-3.x

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

按数组元素排序数组的向量

我在编写解决背包问题的算法时遇到了问题.我有一个3元素数组(C++ 11)的向量,我想通过let的说明这些数组的第一个元素来对向量进行排序.

我已尝试使用预定义的比较函数进行std :: sort,但它甚至都没有编译.

我想我的比较功能不能像我期望的那样工作:

bool compareByValue(const data &a, const data &b)
{
    return a[0] < b[0];
}

int main()
{
    vector<array<int, 3> > myVector;
    ...
    sort ( myVector.begin(), myVector.end(), compareByValue );
}
Run Code Online (Sandbox Code Playgroud)

这不是我第一次遇到类似的问题,我试图在网上找到解决方案,但没有任何令人满意的结果.

c++ arrays sorting vector c++11

-3
推荐指数
1
解决办法
190
查看次数

标签 统计

arrays ×1

c++ ×1

c++11 ×1

mocking ×1

pytest ×1

python ×1

python-3.x ×1

sorting ×1

unit-testing ×1

vector ×1