首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写条件测试的pathlib.Path.exists

重写条件测试的pathlib.Path.exists
EN

Stack Overflow用户
提问于 2020-07-26 03:56:49
回答 1查看 187关注 0票数 0

在测试特定路径时,我希望使Path.exists()只返回True:

代码语言:javascript
复制
    from unittest import TestCase
    from mock import patch
    import pathlib

    def fn(names):
      for index, name in enumerate(names):
        if pathlib.Path(name).exists():
          return index

    class T(TestCase):
      @patch.object(pathlib.Path, 'exists', side_effect=lambda: self.name == "countme")
      def test_fn(self, exists_mock):
        self.assertEqual(2, fn(["not", "not", "countme", "not"]))

我也试过用

代码语言:javascript
复制
      @patch.object(pathlib.Path, 'exists', side_effect=lambda self: self.name == "countme")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-26 06:32:55

你的代码几乎是正确的。以下是一个工作版本:

代码语言:javascript
复制
class T(TestCase):
   @patch.object(pathlib.Path, 'exists', lambda self: self.name == "countme")
    def test_fn(self):
        self.assertEqual(2, fn(["not", "not", "countme", "not"]))

使用lambda忽略了lambda参数,而不是使用side_effect,只需替换函数即可。

问题是,side_effect只是一个独立于实际函数调用的返回值(或返回值列表),因此使用lambda将无法工作--它将不会以self作为参数进行调用。替代使用的new参数将替换实际的函数,因此将用正确的参数调用它。

使用patch的类似版本如下所示:

代码语言:javascript
复制
class T(TestCase):
    @patch('pathlib.Path.exists', lambda self: self.name == "countme")
    def test_fn(self):
        self.assertEqual(2, fn(["not", "not", "countme", "not"]))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63095938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档