我是我自己项目的单元测试的新手,所以这是我第一次尝试从头开始编写单元测试。我正在使用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.
答案 0 :(得分:2)
我认为你的方式是正确的。但我会发一些建议;
self.testdata.close()
从setUp()
移至tearDown()
功能。
try:
file.open()
finally:
file.close()
_tests
的文件夹,在这个文件夹中你应该放置测试模块(在你的情况下你只有一个模块)。然后,为每个模块创建一个包含模块名称的文件夹,并将模块测试使用的文件放在该文件夹中。要了解有关TDD和测试的更多信息,请阅读本书Test Driven Development: By Example
答案 1 :(得分:1)
不,它看起来不像你。 单元测试应该小巧,快速且简单。 进行“复杂”测试(任何依赖于外部数据库,文件系统,配置,环境或测试本身以外的任何东西以及正在测试的代码的东西)都是有价值的,但不应成为“核心单元测试”的一部分”。 单元测试应验证代码是否符合规范。一个测试应验证使用正确的输入,您将获得预期的输出。应该存在另一个单元测试来验证错误输入的正确行为。这通常会针对不同类型的正确或不正确的输入重复,但通常会有更多的错误输入测试。 尽管如此,如果没有规范,你就没有太多的单元测试。 通常的问题是缺乏技术规范(规范),它告诉您输入的正确或不正确以及在每种情况下该做什么。
除了您正在访问文件系统之外,您的测试看起来还不错。