python3、Flask和unittest解码的最佳方法

2024-07-05 14:58:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道这有多重要,但我觉得这很烦人,我不知道这是因为这对我来说是新的,还是我误解了一些事情

我正在将一个flask应用程序移植到Python 3中,在Python 2中,我进行了如下单元测试:


        project1=Project(shortname="newproj1")
        db.session.add(project1)
        db.session.commit()

        response1 = self.app.test_client().get('/projects/')

        self.assertEqual('200 OK', response1.status)
        self.assertIn('newproj1', response1.data)

在python3中,这是失败的,因为Flask的响应对象是字节字符串,而查找的对象是unicode字符串

有几种不同的方法可以解决这个问题。我不知道他们中的一个是最好的,还是更好的,或者有没有别的方法去做我没有想到的事情。在某种程度上,这让我很恼火,因为我想出的任何方法似乎都不如Python2干净

选项1-添加解码调用:

       self.assertIn('newproj1', response1.data.decode())

选项2-更改响应对象

        response1 = self.app.test_client().get('/projects/', as_text=True)
...
        self.assertIn('newproj1', response1.data)

选项3-声明正在搜索的数据以查找byte对象

        self.assertIn(b'newproj1', response1.data)

有没有更好的办法?我是不是想得太多了?还是我遗漏了什么


Tags: 对象方法testselfclientappdbdata