Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting nose to ignore a function with 'test' in the name

The nose discovery process finds all modules whose name starts with test, and within them all functions which have test in the name and tries to run them as unit tests. See http://nose.readthedocs.org/en/latest/man.html

I have a function whose name is say, make_test_account, in the file accounts.py. I want to test that function in a test module called test_account. So at the start of that file I do:

from foo.accounts import make_test_account

But now I find that nose treats the function make_test_account as a unit test and tries to run it (which fails because it doesn't pass in any parameters, which are required).

How can I make sure nose ignores that function specifically? I would prefer to do it in a way which means I can invoke nose as nosetests, without any command line arguments.

like image 840
jwg Avatar asked Nov 07 '15 08:11

jwg


People also ask

Which command is used to run nose tests?

nose can be integrated with DocTest by using with-doctest option in athe bove command line. The result will be true if the test run is successful, or false if it fails or raises an uncaught exception. nose supports fixtures (setup and teardown methods) at the package, module, class, and test level.


2 Answers

Tell nose that the function is not a test - use the nottest decorator.

# module foo.accounts

from nose.tools import nottest

@nottest
def make_test_account():
    ...
like image 149
Dušan Maďar Avatar answered Sep 18 '22 12:09

Dušan Maďar


Nose has a nottest decorator. However, if you don't want to apply the @nottest decorator in the module you are importing from you can also simply modify the method after the import. It may be cleaner to keep unit test logic close to the unit test itself.

from foo.accounts import make_test_account
# prevent nose test from running this imported method
make_test_account.__test__ = False

You can still use nottest but it has the same effect:

from nose.tools import nottest
from foo.accounts import make_test_account
# prevent nose test from running this imported method
make_test_account = nottest(make_test_account)
like image 29
jsnow Avatar answered Sep 17 '22 12:09

jsnow