Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to make Nose only run tests which are sub-classes of TestCase or TestSuite (like unittest.main())

My test framework is currently based on a test-runner utility which itself is derived from the Eclipse pydev python test-runner. I'm switching to use Nose, which has many of the features of my custom test-runner but seems to be better quality code.

My test suite includes a number of abstract test-classes which previously never ran. The standard python testrunner (and my custom one) only ran instances of unittest.TestCase and unittest.TestSuite.

I've noticed that since I switched to Nose it's running just about anything which starts withthe name "test" which is annoying... because the naming convention we used for the test-mixins also looks like a test class to Nose. Previously these never ran as tests because they were not instances of TestCase or TestSuite.

Obviously I could re-name the methods to exclude the word "test" from their names... that would take a while because the test framework is very big and has a lot of inheritance. On the other hand it would be neat if there was a way to make Nose only see TestCases and TestSuites as being runnable... and nothing else.

Can this be done?

like image 873
Salim Fadhley Avatar asked Jun 24 '10 14:06

Salim Fadhley


People also ask

Which function in unittest will run all your tests?

pytest. The pytest test runner supports the execution of unittest test cases.

How many tests are run when below code is tested using pytest?

How many tests are run, when below code is tested using pytest import unittest def test_sample1(): assert 3 == 3 class SampleTestClass(unittest. TestCase): def test_sample2(self): self. assertEqual(3, 3)

Can you mix pytest and unittest?

pytest supports running Python unittest -based tests out of the box. It's meant for leveraging existing unittest -based test suites to use pytest as a test runner and also allow to incrementally adapt the test suite to take full advantage of pytest's features.

How do I run a test with unittest?

If you're using the PyCharm IDE, you can run unittest or pytest by following these steps: In the Project tool window, select the tests directory. On the context menu, choose the run command for unittest . For example, choose Run 'Unittests in my Tests…'.


1 Answers

You could try to play with -m option for nosetests. From documentation:

A test class is a class defined in a test module that matches testMatch or is a subclass of unittest.TestCase

-m sets that testMatch, this way you can disable testing anything starting with test.

Another thing is that you can add __test__ = False to your test case class declaration, to mark it “not a test”.

like image 57
nkrkv Avatar answered Sep 22 '22 10:09

nkrkv