使用发现运行时,Python unittest 断言失败。单独运行时它通过

时间:2021-04-27 14:35:06

标签: python python-3.x python-unittest python-unittest.mock

我尝试对文件是否正确保存进行单元测试。如果我直接使用 python -m unittest test.test_save 运行单元测试,则该单元测试有效但是如果我尝试使用 python -m unittest discover 一次运行所有单元测试,除了保存测试之外,每个测试都可以完美运行。 测试代码:

def test_save(self):
    with patch('builtins.open', mock_open()) as fake_open:
        Saver.save(Player("Bob", True), Player("Ross", False))
        fake_open().write.assert_called_with(self.dummyjson)

要测试的功能:

def save(player1, player2):
    with open(FILENAME, 'w') as file_score:
        data: dict = {
            "player1": {
                "name": player1.name,
                "human": player1.human,
                "field_own": player1.board.field_own,
                "field_enemy": player1.board.field_enemy,
            },
            "player2": {
                "name": player2.name,
                "human": player2.human,
                "field_own": player2.board.field_own,
                "field_enemy": player2.board.field_enemy,
            }
        }
        file_score.write(json.dumps(data))

通过覆盖我可以看到,使用 unittest discover 时, with open() 语句根本不会被执行。因此模拟没有注册任何调用。直接执行这个测试时,with open() 语句正常执行,我有 100% 的覆盖率。

谁能解释为什么会发生这种情况,也许有解决方法?

编辑项目树:

Project Directory/
├─ modules/
│  ├─ __init__,py
│  ├─ module1.py
│  ├─ module2.py
│  ├─ save.py
├─ test/
│  ├─ __init__.py
│  ├─ test_module1.py
│  ├─ test_module2.py
│  ├─ test_save.py
├─ main.py

0 个答案:

没有答案
相关问题