gpt4 book ai didi

python - 使用 Nose 和 Sqlalchemy 以及固定装置编写 Python 测试类

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:14 24 4
gpt4 key购买 nike

今天我一直在与 Nose 和固定装置作斗争,忍不住觉得自己做错了什么。

我将所有测试编写为函数,一切正常,但我想将它们移动到测试类,因为我认为它更整洁,然后可以继承测试。

我创建了一个到 testdb 的连接、要使用的事务以及所有测试的包级别的多个固定装置。应用程序中的存储库类使用此连接从数据库加载测试数据。

我尝试使用要测试的类作为属性来创建测试类。这是在测试类的 __init__ 函数中设置的。

我遇到的问题是我正在测试的类需要使用测试数据库中的数据进行实例化,但是 Nose 在运行包设置函数之前创建了测试类的实例。这意味着创建测试类并且测试失败时没有固定装置。

我可以让它工作的唯一方法是添加一个模块设置函数,该函数将我想要测试的类定义为全局,然后在测试方法中使用该全局,但这看起来很老套。谁能提出更好的方法吗?

这不是很清楚,所以这是我的测试模块的示例......

from nose.tools import *
from myproject import repositories
from myproject import MyClass

def setup():
global class_to_test

db_data_repo = repositories.DBDataRepository()
db_data = db_data_repo.find(1)

class_to_test = MyClass(db_data)


class TestMyClass(object):

def test_result_should_be_an_float(self):
result = class_to_test.do_something()

assert isinstance(result, float)

如果您知道实现此目的的更好方法,请分享:)谢谢!

最佳答案

如果您正在朝着 unittest.TestCase 迈进基于类的测试,您也可以使用将在每个测试方法之前运行的 setUp()/tearDown() 方法,并使用 setUpClass() 来设置特定于类的内容, Nose 会像单元测试一样处理它,如下所示:

class TestMyClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
db_data_repo = repositories.DBDataRepository()
db_data = db_data_repo.find(1)
cls.class_to_test = MyClass(db_data)

def test_result_should_be_an_float(self):
result = self.class_to_test.do_something()
assert isinstance(result, float)

关于python - 使用 Nose 和 Sqlalchemy 以及固定装置编写 Python 测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25894006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com