【问题标题】:Udacity - Flask PythonUdacity - 烧瓶 Python
【发布时间】:2021-09-25 13:33:48
【问题描述】:

我一直在学习有关单元测试烧瓶应用程序的 Udacity 课程。

所需的所有文件都在这个Github link 中,我们将只关注“后端”目录。这个目录包含flaskr目录和两个文件——其中一个是test_flaskr.py,我正在尝试修复这个test_delete_book方法。

目前这个test_delete_book 测试方法的编码方式它只会通过第一个测试(并且将在后续测试中失败)。所以我想要做的是获取最后一个 Book 条目的 'id' 键的值,并将其传递给 delete book API 。在同一个测试文件test_flaskr.py 中还有另一个test_create_new_book 方法可确保Book 表永远不会耗尽数据(因此test_delete_book 在我的代码更改后永远不会失败。

顺便说一下,这里是 Book 表结构的link

这是我的 test_delete_book 代码(仅强调两行 - 第 03 行和第 04 行):

01    # Delete a different book in each attempt
02    def test_delete_book(self):
03        book = Book.query.order_by(Book.id.desc()).first()
04        book_id_to_delete = book.id
05        # res = self.client().delete('/books/<book_id_to_delete')
06        res = self.client().delete('/books/' + str(book_id_to_delete))
07        data = json.loads(res.data)
80
09        book = Book.query.filter(Book.id == book_id_to_delete).one_or_none()
10
11        self.assertEqual(res.status_code, 200)
12        self.assertEqual(data['success'], True)
13        self.assertEqual(data['deleted'], book_id_to_delete)
14        self.assertTrue(data['total_books'])
15        self.assertTrue(len(data['books']))
16        self.assertEqual(book, None)

在第 03 行,我编写了 SQLAlchemy 查询以获取最后一个 Book 表条目的 book.id 值,并将最后一个 book id 值保存在 book_id_to_delete 变量中。顺便说一句,这个测试实际上与数据库接口(未模拟)。在我运行测试之前,我注意到最后一个 Book 表条目的“id”键。当我运行测试时,所有测试都通过了,但最后一个表条目仍在表中。另外,我没有看到应该由我之前提到的test_create_new_book 方法创建的新记录。

这就是奇怪的地方(至少对我来说):

当我通过将“book.id”替换为 Book 表中最后一个条目的实际图书 id 值来修改第 04 行时,然后运行测试,不仅最后一个条目从 Book 表中删除,而且我还可以看到test_create_new_book方法创建的新书表记录。

非常感谢任何有用的意见。

【问题讨论】:

    标签: python api flask python-unittest


    【解决方案1】:

    我终于能够调试单元测试,并且我能够看到一条记录实际上正在被删除。我的单元测试包括一个创建记录的测试用例,我的删除测试用例采用 LAST 记录(由我的“创建测试用例”添加)并成功删除它。

    Python 方面,以下行

    res = self.client().delete('/books/' + str(book_id_to_delete)
    

    应该替换为:

    res = self.client().delete('/books/{}'.format(str(book_id_to_delete)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2013-11-16
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多