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