我试图学习如何在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
感谢任何帮助
答案 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)
main()
不需要。
Django对测试的位置很挑剔。如果您的应用位于myapp/
,我应该在myapp/tests.py
进行测试。
示例:
./manage.py test
或 ./manage.py test -v2 myapp