我正在进行这些单元测试吗?

时间:2010-01-21 19:01:33

标签: python unit-testing

我是我自己项目的单元测试的新手,所以这是我第一次尝试从头开始编写单元测试。我正在使用python和unittest模块。这里测试的TodoList类是实际列表的包装器,还有一些额外的方法可以保存到光盘。它还定义了一些通过列表中的ID获取项目的方法(与列表索引不同)。

测试(为了不让人们永远滚动,我已经删除了一些辅助方法和一些好的测试):

class TodoListTests(unittest.TestCase):

    def setUp(self):
        self.testdata = open("./testdata.json", "r")
        self.testdata_text = self.testdata.read()
        self.testdata.close()

    def tearDown(self):
        try:
            os.remove("./todo.json")
        except OSError:
            # File not created, no need to delete.
            pass

    def create_todolist_and_safe_list(self):
        self.create_data_file()
        self.todolist = todolist.TodoList("./todo.json")
        self.list = json.loads(self.testdata_text)

    def create_data_file(self):
        datafile = open("./todo.json", "w")
        datafile.write(self.testdata_text)
        datafile.close()

    # Snip out a few more helper methods

    def test_loop(self):
        self.create_todolist_and_safe_list()
        test_list = []
        for item in self.todolist:
        test_list.append(item)

        self.assertEquals(test_list, self.list)


    def test_save(self):    
        self.create_todolist_and_safe_list()
        self.todolist.save()
        newfile_text = self.get_data_file_as_string()
        self.assertEquals(newfile_text, self.testdata_text)

    # Snip out the rest of the tests.

Full link to source

2 个答案:

答案 0 :(得分:2)

我认为你的方式是正确的。但我会发一些建议;

  • self.testdata.close()setUp()移至tearDown()功能。
  • 使用try / finally块围绕其他人打开/关闭。因此,如果文件未成功打开,则会关闭。

    try:
        file.open()
    finally:
        file.close()

  • 更好地整理您的测试文件夹。我建议你创建一个名为_tests的文件夹,在这个文件夹中你应该放置测试模块(在你的情况下你只有一个模块)。然后,为每个模块创建一个包含模块名称的文件夹,并将模块测试使用的文件放在该文件夹中。

要了解有关TDD和测试的更多信息,请阅读本书Test Driven Development: By Example

答案 1 :(得分:1)

不,它看起来不像你。 单元测试应该小巧,快速且简单。 进行“复杂”测试(任何依赖于外部数据库,文件系统,配置,环境或测试本身以外的任何东西以及正在测试的代码的东西)都是有价值的,但不应成为“核心单元测试”的一部分”。 单元测试应验证代码是否符合规范。一个测试应验证使用正确的输入,您将获得预期的输出。应该存在另一个单元测试来验证错误输入的正确行为。这通常会针对不同类型的正确或不正确的输入重复,但通常会有更多的错误输入测试。 尽管如此,如果没有规范,你就没有太多的单元测试。 通常的问题是缺乏技术规范(规范),它告诉您输入的正确或不正确以及在每种情况下该做什么。

除了您正在访问文件系统之外,您的测试看起来还不错。