【问题标题】:Django Test Case Can't run methodDjango 测试用例无法运行方法
【发布时间】:2015-06-13 02:32:24
【问题描述】:

我刚刚开始使用 Django,所以这可能是一些愚蠢的事情,但我什至不知道在这一点上用谷歌搜索什么。

我有一个看起来像这样的方法:

def get_user(self,user):
    return Utilities.get_userprofile(user)

方法如下:

@staticmethod
def get_userprofile(user):
    return UserProfile.objects.filter(user_auth__username=user)[0]

当我将它包含在视图中时,一切都很好。当我编写一个测试用例以使用 Utility 类中的任何方法时,我得到 None 返回:

两个测试用例:

def test_stack_overflow(self):
    a = ObjName()
    print(a.get_user('admin'))

def test_Utility(self):
    print(Utilities.get_user('admin'))

结果:

Creating test database for alias 'default'...
None
..None
.
----------------------------------------------------------------------

有人能告诉我为什么这在视图中有效,但在测试用例中无效并且不生成任何错误消息吗?

谢谢

【问题讨论】:

    标签: python django testing


    【解决方案1】:

    验证您的单元测试是否符合以下要求,

    1. TestClass必须写成文件名test*.py
    2. TestClass 必须是 unittest.TestCase 的子类
    3. TestClass 应该有一个 setUp 函数来在数据库中创建对象(通常以这种方式完成,但对象创建也可以在测试函数中发生)
    4. TestClass 函数应以test 开头,以便被./manage.py 测试命令识别和运行
    5. TestClass 可能有 tearDown 以正确结束单元测试用例。

    测试用例执行流程:

    当您运行./manage.py test 时,django 会设置一个test_your_database_name 并创建setUp 函数中提到的所有对象(通常)并开始按照类内放置的顺序执行测试函数,当所有的测试函数被执行,最后寻找tearDown函数如果在测试类中存在则执行并销毁测试数据库。

    可能是因为您可能没有在 setUp 函数或 TestClass 的其他位置调用对象创建。

    您能否发布整个回溯和测试文件以更好地帮助您?

    【讨论】:

    • 嘿,你提到的最后一点可能是它!该方法通过用户名获取用户对象,如果有一个全新的数据库,那么它显然不会拉入任何东西。我想我需要在开始测试之前创建一些对象以确保它是有效的。
    • 如果回答有帮助,您可以接受。
    • 我一定会的;让我先验证一下 :) 这通常是如何处理的?您在测试用例中有一个方法可以在数据库中设置一些项目吗?
    • 在数据库中设置数据例如Models.objects.create(**kwargs) 通常可以在TestClass 中的setUp 函数中处理,您可以参考Django - Writing and running tests
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多