我尝试对文件是否正确保存进行单元测试。如果我直接使用 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