从模块main内部运行一个测试

问题描述 投票:2回答:1

假设我具有myclass_test.pyNose测试,其内容如下:

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最后是preparsingmyclass_test.sage.py,并与Sage Python解释器一起嵌入运行。

因此Python解释器无法将其识别为模块,因此传递sage myclass_test.sage TestMyClass.test_methodsage myclass_test.sage myclass_test.sage:TestMyClass.test_methodsage 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这样的外部流道。

python unit-testing nose sage
1个回答
0
投票

我还没有用过鼻子,但是可以用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测试”。

© www.soinside.com 2019 - 2024. All rights reserved.