Python unittest无法识别测试

时间:2014-05-29 19:13:03

标签: python python-unittest

我试图学习如何在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

感谢任何帮助

3 个答案:

答案 0 :(得分:2)

如果你移动

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

在脚本结束时,它将起作用。

更新

以下是我的猜测:当您在脚本中间调用unittest.main()时,您的测试类尚未定义,因此unittest没有接受任何测试。将unittest.main()移到最后,或者更准确地说 - 在定义测试类之后,确保unittest 看到这些测试。

答案 1 :(得分:0)

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

目录结构:

Some-Project
└── server
    └── api-devops
        └── scripts
            └── crash_monitoring
                ├── CrashDump.py
                ├── test_CrashDump.py
                ├── env
                └── requirements.txt

test_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()

从根目录运行的命令,Some-Project

(env) Some-Project cameronhudson$ python3 -m unittest discover -s ./server/api-devops/scripts/crash_monitoring
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

从包含测试的目录运行的命令,crash_monitoring

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

OK

答案 2 :(得分:-1)

  1. main()不需要。

  2. Django对测试的位置很挑剔。如果您的应用位于myapp/,我应该在myapp/tests.py进行测试。

  3. 示例:

    ./manage.py test
    

    或     ./manage.py test -v2 myapp