【发布时间】:2017-01-05 01:30:17
【问题描述】:
我使用Django 1.9 和django.test 进行单元测试。
这是我测试signals的代码:
@receiver(post_save, sender=EmailNotification, dispatch_uid="spacegraphy")
def post_save_notification(sender, instance, created, **kwargs):
if created:
if settings.DEBUG:
print("post_save: created!!!")
else:
instance.send_notification()
当我在本地运行此应用程序时,它以开发模式运行,将print(settings.DEBUG) 显示为True。 (我在shell_plus 的django-extension 中检查了它
但是,当我测试我的单元测试时,print(settings.DEBUG) 显示 False。
我不知道为什么会这样。有什么想法吗?
【问题讨论】:
-
这不是您用于“测试”信号的代码,这是您要测试的应用程序逻辑(如果我理解正确的话)。目前,您正试图检测应用程序逻辑中的测试条件,以便避免代码在现实世界中产生的副作用,但如果您遵循这条路径,您最终会得到混乱且无法维护的代码。这就是嘲笑的目的。
-
@ChidG 在应用程序逻辑中模拟? ...
-
@ user3595632 不,也许我不够清楚。我的意思是在测试中模拟,它应该与应用程序逻辑完全分离。
-
假设新注册出现时有一个松弛通知。在开发模式下,我可能会因为某种原因必须注册。在这种情况下,它也会发送松弛通知,我不想这样做。
-
当然,这是合理的,但您可以在那里进行某种形式的“模拟”——例如,使用项目设置中定义的“测试”松弛实例来发布。您可以使用类似的模式进行测试。如何构建取决于您自己,但您是对的,在某些情况下检查代码中的
DEBUG状态是有效的。我不认为大量使用它是明智的。也许你应该看看 Django 如何处理电子邮件——即使用不同的后端进行开发/测试和生产——并遵循类似的模式。
标签: django unit-testing django-testing