我有一个用@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__.
什么是正确的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)