如何在具有鼻测的文件中指定单个testing?

我有一个名为test_web.py的文件,其中包含一个类TestWeb和许多名为test_something()的方法。

我可以像这样在课堂上进行每一个testing:

$ nosetests test_web.py ... ====================================================================== FAIL: checkout test ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/me/path/here/test_web.py", line 187, in test_checkout ... 

但我似乎无法运行个别testing。 在同一个PWD中运行时,这些给我“没有这样的testing”的错误:

 $ nosetests test_web.py:test_checkout $ nosetests TestWeb:test_checkout 

这里有什么可能是错的?

您必须像这样指定它: nosetests <file>:<Test_Case>.<test_method>

 nosetests test_web.py:TestWeb.test_checkout 

看文档

你也可以指定一个模块:

 nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users 

在命令行中指定名称与其他答案一样,可以起到一定的作用,这很有用。 然而,当我正在写testing的时候,我经常会发现我只想运行我正在进行的testing,而且我必须在命令行上写的名字变得相当长和繁琐。 在这种情况下,我更喜欢使用自定义装饰器和标志。

我定义wipd (“正在进行装饰器”)如下所示:

 from nose.plugins.attrib import attr def wipd(f): return attr('wip')(f) 

这个定义了一个装饰器@wipd ,它将在它所装饰的对象上设置@wipd属性。 例如:

 import unittest class Test(unittest.TestCase): @wipd def test_something(self): pass 

然后,可以在命令行中使用@wipd将testing的执行缩小到标有@wipd的testing。

注意名字…

我使用@wipd作为装饰器而不是@wip来避免这种问题:

 import unittest class Test(unittest.TestCase): from mymodule import wip @wip def test_something(self): pass def test_something_else(self): pass 

import将使wip装饰器成为该类的成员,并且将select该类中的所有testing。 attrib插件检查testing方法的父类,看是否存在所选的属性,并且由attrib创build和testing的属性不存在于隔离的空间中。 所以如果你用-a footesting,而你的类包含foo = "platypus" ,那么这个类中的所有testing都会被插件选中。

要运行多个特定的testing,您可以将它们添加到命令行中,以空格分隔。

 nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout