Python单元测试不识别测试

Python单元测试不识别测试,python,python-unittest,Python,Python Unittest,我试图学习如何在python中使用unittest框架。当我运行包含测试的文件时,我不断收到下面的消息 ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK 我在这里和其他地方搜索过,不明白为什么它不能识别测试。每个测试都从test开始,而unittest的其他部分似乎符合文档要求 以下是脚本的文本: import unittest from dateti

我试图学习如何在python中使用
unittest
框架。当我运行包含测试的文件时,我不断收到下面的消息

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
我在这里和其他地方搜索过,不明白为什么它不能识别测试。每个测试都从
test
开始,而
unittest
的其他部分似乎符合文档要求

以下是脚本的文本:

import unittest
from datetime import datetime, timedelta

class Activity(object):
    'Holds detail information on a activity'
    def __init__(self, location, activity_name, activity_id, start_date, end_date):
        self.activity_name = activity_name
        self.activity_id = activity_id
        self.start_date = datetime.strptime(start_date, '%m/%d/%Y').date()
        self.end_date = datetime.strptime(end_date, '%m/%d/%Y').date()
        self.location = location

if __name__ == '__main__':
    unittest.main()

class TestActivity(unittest.TestCase):

    def setUp(self):
        self.activity = Activity('UVU', 'OpenWest', 'Beginning Python'
                            , '00000', '12/1/2013', '12/30/3013')

    def test_activity_creation(self):
        self.assertEqual(self.activity.location, 'UVU')
        self.assertEqual(self.activity.activity_name, 'OpenWest')
        self.assertEqual(self.activity.activity_id, '00000')
        self.assertEqual(self.activity.start_date, datetime.strptime('12/1/2013', '%m/%d/%Y').date())
        self.assertEqual(self.activity.start_date, datetime.strptime('12/30/2013', '%m/%d/%Y').date())

    def test1(self):
        self.assertEqual(1,1)

    def tearDown(self):
        del self.activity
如果您搬家,我们将不胜感激

if __name__ == '__main__':
    unittest.main()
到脚本的末尾,它就会工作

更新

这是我的猜测:当你在脚本的中间调用了代码> UNITTest.MIN()/CODE时,你的测试类还没有被定义,因此<代码> UNITTest< /Cord>没有进行任何测试。通过将

unittest.main()
移动到末尾,或者更准确地说,在定义测试类之后,您可以确保
unittest
看到这些测试

  • 不需要
    main()

  • Django对测试的位置很挑剔。如果你的应用程序在
    myapp/
    中,我记得测试应该在
    myapp/tests.py

  • 例如:

    ./manage.py test
    

    ./manage.py test-v2myapp

    这是我使用
    python3.9
    的解决方案。诀窍是在测试文件的前面加上
    test
    ,全是小写。
    (我在后面加了一个下划线以便于视觉分隔,但这不是必需的。)

    目录结构:

    Some-Project
    └── server
        └── api-devops
            └── scripts
                └── crash_monitoring
                    ├── CrashDump.py
                    ├── test_CrashDump.py
                    ├── env
                    └── requirements.txt
    
    测试的内容\u CrashDump.py

    import unittest
    
    
    class CrashDumpTest(unittest.TestCase):  # The class name is irrelevant. It does not need to contain the word 'test'.
    
        def test_something(self):  # Like the filename, the function name must begin with 'test'
            self.assertTrue(True)
    
    
    正如@johntellsall所说,
    main()
    是不需要的

    从根目录运行的命令,
    某些项目

    (env) Some-Project cameronhudson$ python3 -m unittest discover -s ./server/api-devops/scripts/crash_monitoring
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    OK
    
    从包含测试的目录运行的命令,
    crash\u monitoring

    (env) crash_monitoring cameronhudson$ python3 -m unittest
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    OK
    

    您的项目结构是什么样的?您是如何运行测试的?就我个人而言,我使用鼻测试进行测试发现。这是一个相当小的项目,只有几个脚本。我对单元测试(以及一般的编程)非常陌生,所以我使用这个小项目来学习单元测试和其他各种主题。我还要看一下鼻测试。非常感谢。您可以在github.com/srdone/consutivetime上看到该项目。非常好,谢谢!因此,您是否必须将其放在末尾,因为否则测试用例不会加载?导入/运行时,Python模块将自顶向下执行。因此,在本例中,在运行unittest.main()时。它正在查找的命名空间中正好有0个测试用例。如果您将它移动到底部或另一个导入它的文件(当然是在导入之后),那么它将执行与此答案中建议的相同的操作。所以@haivu,我同意你的猜测。