运行 unittest.main() 来自 python 调用任务
Run unittest.main() from a python invoke task
我正在尝试 运行 通过 Python Invoke library 进行一些单元测试,但我对 Python 的了解不足使我无法这样做。
这是我的示例代码:
my_tests.py
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
def main():
unittest.main()
if __name__ == '__main__':
main()
tasks.py
from invoke import task
@task
def tests(ctx):
main()
@task
def other_task(ctx):
print("This is fine")
def main():
import my_tests
import unittest
unittest.main(module='my_tests')
if __name__ == '__main__':
main()
这就是我得到的:
C:\ittle_projects\invoke_unittest>python my_tests.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.002s
OK
C:\ittle_projects\invoke_unittest>python tasks.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
C:\ittle_projects\invoke_unittest>inv tests
E
======================================================================
ERROR: tests (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module 'my_tests' has no attribute 'tests'
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
测试 运行 在 my_tests.py 和 tasks.py 中都很好,但是当我使用 invoke stuff 中断时。
我怎样才能使它工作或下一步我应该看哪里?
您 运行 遇到的问题是 unittest.main()
使用调用您的程序的命令行参数来确定 运行 进行哪些测试。由于您的程序正在作为 inv tests
执行,您程序的第一个参数是 tests
,因此 unittest
正在尝试 运行 测试模块名称 tests
不存在。
您可以通过从 system arguments list:
中弹出最后一个参数 (tests
) 来解决这个问题
import sys
from invoke import task
@task
def tests(ctx):
# Pop "tests" off the end of the system arguments
sys.argv.pop()
main()
@task
def other_task(ctx):
print("This is fine")
def main():
import my_tests
import unittest
unittest.main(module='my_tests')
if __name__ == '__main__':
main()
我正在尝试 运行 通过 Python Invoke library 进行一些单元测试,但我对 Python 的了解不足使我无法这样做。
这是我的示例代码:
my_tests.py
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
def main():
unittest.main()
if __name__ == '__main__':
main()
tasks.py
from invoke import task
@task
def tests(ctx):
main()
@task
def other_task(ctx):
print("This is fine")
def main():
import my_tests
import unittest
unittest.main(module='my_tests')
if __name__ == '__main__':
main()
这就是我得到的:
C:\ittle_projects\invoke_unittest>python my_tests.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.002s
OK
C:\ittle_projects\invoke_unittest>python tasks.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
C:\ittle_projects\invoke_unittest>inv tests
E
======================================================================
ERROR: tests (unittest.loader._FailedTest)
----------------------------------------------------------------------
AttributeError: module 'my_tests' has no attribute 'tests'
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
测试 运行 在 my_tests.py 和 tasks.py 中都很好,但是当我使用 invoke stuff 中断时。 我怎样才能使它工作或下一步我应该看哪里?
您 运行 遇到的问题是 unittest.main()
使用调用您的程序的命令行参数来确定 运行 进行哪些测试。由于您的程序正在作为 inv tests
执行,您程序的第一个参数是 tests
,因此 unittest
正在尝试 运行 测试模块名称 tests
不存在。
您可以通过从 system arguments list:
中弹出最后一个参数 (tests
) 来解决这个问题
import sys
from invoke import task
@task
def tests(ctx):
# Pop "tests" off the end of the system arguments
sys.argv.pop()
main()
@task
def other_task(ctx):
print("This is fine")
def main():
import my_tests
import unittest
unittest.main(module='my_tests')
if __name__ == '__main__':
main()