小编Eri*_*ani的帖子

在 Python 中使用“@patch.object”和“with patch.object”有什么区别?

在为我的应用程序编写单元测试时,我一直在使用@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)

python unit-testing python-2.7 python-mock python-unittest

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

对 docker 容器执行 sed 命令

我正在尝试更改 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 执行,但也没有用。

bash sed docker

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

获取两个字符串之间的公共部分 c#

我需要的是获得两个单词之间的共同部分并获得差异。

例子:

场景一

  • word1 =推荐
  • word2 =测试

将返回

  • 通用部分测试,差异单项

场景二

  • word1 =测试
  • word2 =推荐

将返回

  • 通用部分测试,差异单项

场景3

  • word1 =推荐
  • word2 =特斯拉

将返回

  • 公共部分Tes , 差异timonialla

这两个词的共同部分总是在开头。

换句话说,我需要保留单词的开头直到单词变得不同,而不是我需要得到差异。

我正在尝试避免使用大量 if 和 for 。

谢谢你们。

c# linq string

2
推荐指数
2
解决办法
4385
查看次数