如何单元测试打印到文件的方法?

How to unittest a method that print to file?

我有一种方法可以将一些值打印到文件中。

from typing import TextIO

def print_to_file(file: TextIO, value: str) -> None:
  print(value, file=file)

这是我当前的单元测试,但在在线服务器上 运行 单元测试时会出现 PermissionError。正确的测试方法是什么?

def test_print_to_file(self):
  file_name = 'temp_file.txt'
  value = '123'
  expected_content = '123\n'

  with open(file_name, 'w') as file:
    print_to_file(file, value)

  with open(file_name, 'r') as file:
    self.assertEqual(file.read(), expected_content)

尝试在 w & r 中添加 + 并尝试

      def test_print_to_file(self):
         file_name = 'temp_file.txt'
         value = '123'
         expected_content = '123\n'

         with open(file_name, 'w+') as file:
         print_to_file(file, value)

         with open(file_name, 'r+') as file:
         self.assertEqual(file.read(), expected_content) 

我使用 tempfile 修复了它。

import tempfile

def test_print_to_file(self):
  value = '123'
  expected_content = '123\n'

  with tempfile.TemporaryFile('w+t') as file:
    print_to_file(file, value)
    file.seek(0)
    self.assertEqual(file.read(), expected_content )