假设我具有myclass_test.py
和Nose测试,其内容如下:
import nose
class TestMyClass:
def test_method(self):
assert true
def test_another_method(self):
assert true
if __name__ == "__main__":
nose.runmodule()
所以我可以运行python myclass_test.py
并通过所有测试。一切正常。
我应将什么传递给runmodule()来运行单个测试(例如test_method
)?
如果使用Nose无法实现,是否可以使用其他方式以相同的方式使用其他测试单元(模块在模块内部)?
P.S。我实际上不是运行python myclass_test.py
,而是运行sage myclass_test.sage
。这些是SageMath解释器和SageMath文件。 SageMath代码基本上是Python代码,而myclass_test.sage
最后是preparsing至myclass_test.sage.py
,并与Sage Python解释器一起嵌入运行。
因此Python解释器无法将其识别为模块,因此传递sage myclass_test.sage TestMyClass.test_method
或sage myclass_test.sage myclass_test.sage:TestMyClass.test_method
或sage myclass_test.sage myclass_test.sage.py:TestMyClass.test_method
之类的内容无效(出于相同的原因cannot directly import sage file as module)。即使鼻子自动将argv
传递到runmodule()
。
P.P.S。另外,我不能使用nosetests -q -s sage myclass_test.sage:TestMyClass.test_method
这样的外部流道。
我还没有用过鼻子,但是可以用unittest来做:
import unittest
class TestMyClass(unittest.TestCase):
def test_method(self):
assert True
def test_another_method(self):
assert True
if __name__ == '__main__':
suite = unittest.TestSuite([TestMyClass('test_method')])
unittest.TextTestRunner().run(suite)
这与pytest相同:
import pytest
class TestMyClass:
def test_method(self):
assert True
def test_another_method(self):
assert True
if __name__ == '__main__':
pytest.main([f'{__file__}::TestMyClass::test_method'])
好吧,我也用鼻子检查过,这似乎可行:
import nose
from nose.suite import ContextSuite
class TestMyClass:
def test_method(self):
assert True
def test_another_method(self):
assert True
if __name__ == '__main__':
suite = ContextSuite([TestMyClass.test_method])
nose.runmodule(suite=suite)
尽管输出很奇怪-虽然它肯定在运行测试,但显示“ Ran 0测试”。