在为我的应用程序编写单元测试时,我一直在使用@mock.patch和@patch.object装饰器。但是现在,对于使用装饰器时的某些单元测试,我收到错误“ TypeError: staticmethod object is not an iterator ”。
但是使用相同的代码,如果我使用mock.patch.objector mock.patch.object,一切正常。
例如,在我的测试类中,我有这个方法:
@staticmethod
def my_mock():
...do something
Run Code Online (Sandbox Code Playgroud)
当我尝试以下单元测试时
@mock.patch('mypackage.mymodule.my_method', side_effect=my_mock)
def test_something(self, my_method_mocked):
...test something
Run Code Online (Sandbox Code Playgroud)
我收到了“ TypeError: staticmethod object is not an iterator ”之前所述的错误消息。
但是当我尝试这种方式时
def test_something(self):
with patch.object(mymodule, "my_method") as mocked_method:
mocked_method.side_effect = self.my_mock
...test something
Run Code Online (Sandbox Code Playgroud)
然后一切正常。
我已经阅读了有关模拟和单元测试的 Python 文档,但找不到对此行为的任何解释。
使用装饰器模式和使用模式有什么区别?我在哪里可以找到更多关于这方面的信息?
为了更清楚,这是我的代码结构:
class TestClass(unittest.TestCase):
@staticmethod
def my_mock():
...mock
return service
# doesn't work
@mock.patch('mypackage.mymodule.my_method', side_effect=my_mock)
def test_something(self, my_method_mocked): …Run Code Online (Sandbox Code Playgroud) 我正在尝试更改 docker 容器内的配置文件。
docker exec container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini
Run Code Online (Sandbox Code Playgroud)
在本地执行此 sed 命令工作正常,但是当我尝试在容器中执行此命令时,我收到以下错误消息。
sed: cannot rename tmp/config.ini: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我需要做的是更换“URL_BASE =”从“config.ini文件”之前部署容器到我的服务器。
我不知道为什么 sed 命令在不应该重命名文件时尝试重命名文件。
有任何想法吗?
我试过的
我尝试使用 --privileged 标志执行,但没有奏效。我试图用 chmod 更改文件权限,但出于同样的权限原因我不能。
docker exec --privileged container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini
Result: sed: cannot rename tmp/config.ini: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
修改器
docker exec --privileged container_name chmod 755 tmp/config.ini
Result: chmod: changing permissions of 'tmp/config.ini': Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我也试过在 docker 之前用 sudo 执行,但也没有用。
我需要的是获得两个单词之间的共同部分并获得差异。
例子:
场景一
将返回
场景二
将返回
场景3
将返回
这两个词的共同部分总是在开头。
换句话说,我需要保留单词的开头直到单词变得不同,而不是我需要得到差异。
我正在尝试避免使用大量 if 和 for 。
谢谢你们。
bash ×1
c# ×1
docker ×1
linq ×1
python ×1
python-2.7 ×1
python-mock ×1
sed ×1
string ×1
unit-testing ×1