首页 > 解决方案 > 为什么只有部分内容被写入 python 中的文件?

问题描述

我是 python 新手,一直在使用单元测试来测试程序中的方法。我一直在使用https://docs.python.org/3/tutorial/inputoutput.html作为读取和写入文件的参考。我不明白为什么在我的单元测试中只有一些内容被写入文件。

我当前的单元测试文件:

class Test_test_States(unittest.TestCase):

    def setUp(self):
        self.test_case_number = 1
        self.file = open('Test_States_Results.txt', 'w')
        self.file.write('---Test States Results---\n')
        self.file.write('Test Case\tInput\t\tExpected Output\t\tResult\n')
        self.file.write('----------------------------------------------------------------\n')

    def tearDown(self):
        self.file.close()

    #Unit testing the States Display method
    def test_States_Display_States(self):
        current_states = States()
        file_path = 'pda.def'
        # Write the test case number
        self.file.write(' ' + str(self.test_case_number) + '\t')

        current_states.load(file_path)

        # Write the Input
        self.file.write(str(current_states.states) + '\t\t')

        # Write the Expected Output
        self.file.write('STATES: s0 s1 s2\t\t')

        display = current_states.display_states()
        try:
            self.assertEqual(display, 'STATES: s0 s1 s2')
            # Write the pass results
            self.file.write('Passed\n')
        except AssertionError:
            # Write the fail results
            self.file.write('Failed\n')
        # Increment test case number
        self.test_case_number += 1

我正在写的内容setUp被写入文件;但是,我试图在我的test_States_Display_States方法中写入文件的内容没有被写入文件。我不明白为什么没有将内容写入文件。

我将如何在我的test_States_Display_States方法中正确写入文件?

标签: pythonunit-testingfile-iopython-unittest

解决方案


我试过了,它只用一个测试用例就可以按预期工作。如果你的文件中有其他测试,你不想要setUp,你想要setUpClass. setUptearDown在每个测试用例之前和之后调用一次。setUpClasstearDownClass在整个测试之前和之后调用一次。这setUp意味着每次它都会覆盖文件中的内容。它应该是这样的:

@classmethod
def setUpClass(cls):
    cls.test_case_number = 1
    cls.file = open('Test_States_Results.txt', 'w')
    cls.file.write('---Test States Results---\n')
    cls.file.write('Test Case\tInput\t\tExpected Output\t\tResult\n')
    cls.file.write('----------------------------------------------------------------\n')

@classmethod
def tearDownClass(cls):
    cls.file.close()

推荐阅读