似乎django在测试期间使用的数据库未与其他线程共享
例如:
在TestCase类中:
def my_test(self):
print(MyModel.objects.all())
my_function()
在我班上:
def worker():
print(MyModel.objects.all())
def my_function():
thread = Thread(target=worker)
thread.start()
控制台结果:
[<MyModel object>, <MyModel object>, <MyModel object> ... ]
[]
所以我们得到第一个调用,但是一旦我们进入另一个线程,它就不再使用测试数据库。
我看了看:Django: using same test database in a separate thread 并尝试将相同的数据库用于&#34; NAME&#34;和&#34; TEST_NAME&#34;但它对我不起作用
即使他们正在访问db,我还能做些什么来测试我的线程?
答案 0 :(得分:2)
Django的TestCase
在一个事务中运行每个测试类。任何更改都不会提交,因此其他线程无法读取这些更改的效果。
解决方案是使用TransactionTestCase
。它将以默认的自动提交模式运行查询,您的更改将立即可供其他线程使用。