小编Lun*_*ndy的帖子

Python mock.patch autospec 一个具有属性的类

我有一个用@property 装饰器定义一些属性的类。当我修补该类并设置 autospec=True 时,我希望该属性的行为与规范一样

class MyClass(object):

    def __init__(self):
        self.will_not_be_mocked = 'not mocked'

    @property
    def will_be_mocked(self):
        return 'mocked property'
Run Code Online (Sandbox Code Playgroud)

预期行为:

当我访问实例上的 will_be_mocked 属性时,它的行为就像一个字符串属性。

>>> my_obj = MyClass()
>>> my_obj.will_be_mocked
'mocked property'
Run Code Online (Sandbox Code Playgroud)

它不可调用

>>> my_obj.will_be_mocked()
TypeError: 'str' object is not callable
Run Code Online (Sandbox Code Playgroud)

所以这个测试应该通过:

with self.assertRaises(TypeError):
    my_obj.will_be_mocked()
Run Code Online (Sandbox Code Playgroud)

观察到的行为:

当我修补类并设置 autospec=True 时,该属性按预期包含在模拟的规范中,但是,它变成了 MagicMock,并且是可调用的。因此,任何试图执行该属性的代码都可能通过单元测试并在生产中失败

@patch('__main__.MyClass', autospec=True)
def test_MyClass(self, MyClass):
    my_obj = MyClass()
    with self.assertRaises(TypeError):
        my_obj.will_be_mocked()

AssertionError: TypeError not raised
Run Code Online (Sandbox Code Playgroud)

客观的:

我想以一种易于使用 autospec 进行模拟的方式定义该类。这就是为什么我试图定义属性而不是仅仅在__init__.

python unit-testing mocking

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

Anaconda加速check_cuda()

什么是正确的anaconda加速功能来检查cuda?

使用numba-pro,您可以使用:

>>> from numbapro import check_cuda
numbapro:1: ImportWarning: The numbapro package is deprecated in favour of the accelerate package. Please update your code to use equivalent functions from accelerate.
>>> check_cuda()
CUDA is not available...
Run Code Online (Sandbox Code Playgroud)

要么

>>> numbapro.check_cuda()
------------------------------libraries detection-------------------------------
Finding cublas
    located at /home/usr/miniconda3/envs/cuda/lib/libcublas.so.7.0.28
    trying to open library...   ok
Finding cusparse
    located at /home/usr/miniconda3/envs/cuda/lib/libcusparse.so.7.0.28
    trying to open library...   ok
Finding cufft
    located at /home/usr/miniconda3/envs/cuda/lib/libcufft.so.7.0.35
    trying to open library...   ok
Finding curand
    located at /home/usr/miniconda3/envs/cuda/lib/libcurand.so.7.0.28
    trying to open library... …
Run Code Online (Sandbox Code Playgroud)

python python-3.x anaconda numba-pro accelerate

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