【发布时间】:2025-12-31 16:10:12
【问题描述】:
我正在使用 python unittests 和 sqlalchemy 来测试数据模型以将 WTFoms 存储在 mariaDB 中。 测试应该创建一个数据集,将该数据集写入数据库,读取该数据集进行比较,如果原始数据集与排序数据相同。
所以部分测试看起来像这样:
#set data
myForm = NiceForm()
myForm.name = "Ben"
#write data
db.session.add(myForm)
db.session.commit()
#read data
loadedForms = NiceForm.query.all()
#check that only one entry is in db
self.assertEqual(len(loadedForms), 1)
#compare stores data with dataset
self.assertIn(myForm, loadedForms)
测试接缝工作正常。不,我尝试找出,如果测试失败,如果数据集!= 存储数据。因此,ein 在比较之前更改了数据集,如下所示:
#set data
myForm = NiceForm()
myForm.name = "Ben"
#write data
db.session.add(myForm)
db.session.commit()
#read data
loadedForms = NiceForm.query.all()
#modify dataset
myForm.name = "Foo"
#show content of both
print(myForm.name)
print(loadedForms[0].name)
#check that only one entry is in db
self.assertEqual(len(loadedForms), 1)
#compare stores data with dataset
self.assertIn(myForm, loadedForms)
此测试仍然通过。为什么?我输出myForm.name 和loadedForms[0].name 的内容,两者都设置为Foo。这就是为什么self.assertsIn(myForm, loadedForms)通过测试的原因,但我不明白:
为什么loadedForms的内容会改变,而Foo只适用于myForm?
【问题讨论】:
标签: python unit-testing flask sqlalchemy flask-wtforms