When comparing unittest vs nose, the Slant community recommends nose for most people. In the question“What are the best Python unit testing frameworks?” nose is ranked 2nd while unittest is ranked 5th. The most important reason people chose nose is:
Nose wraps around unittest, adding some more feature and functionality to it, such as SkipTest or auto-discovery.
Ranked in these QuestionsQuestion Ranking
Pros
Pro Part of the Python standard library
PyUnit has been a part of the Python standard library since version 2.1 as the unittest module. This makes it widely available to developers without the need to install additional modules since it's coming out of the box with Python.
Pro Flexible test case execution
The way tests are run is through:
if name == 'main':
unittest.main()
Then unittest.main()
builds a TestSuite
object that contains all the tests that have method names starting with "test", then a TextTestRunner
which then executes each method and prints the results.
But individual test cases can be executed simply by specifying their names on the terminal:
python unittest_program.py testProgram.testGetFeedPostingHost
The default output is usually pretty concise, but it can be more verbose simply by adding a -v
flag in the end when calling the test from the command line.
So unittest can be considered pretty flexible when it comes to test case execution.
Pro Promotes grouping related tests into common test suites
Pro Very fast test collection
Pro Easy to use for people who are comfortable with testing in other languages
Since pyUnit is a derivative of xUnit and it's quite similar to other xUnit frameworks, it's quite easy for people with not much Python background to relate to.
Pro Very precise test duration reports
Unittest reports tests duration in milliseconds
Pro Supercedes unittest
Nose wraps around unittest, adding some more feature and functionality to it, such as SkipTest or auto-discovery.
Pro Minimal boilerplate
Nose tries to keep boilerplate code to a minimum. As such, it's very easy to read and write initial tests.
Pro Numerous plugins available
There's a large number of plugins available for nose which make unit testing easier. Things like coverage reporting, test selection and xUnit-compatible test output can be added through plugins.
Cons
Con camelCase naming
Idiomatic python code uses snake_case, but this was ported so closely from JUnit that it has retained java-style camelCase method names. That can be jarring.
Con No color output
Con The API can make the test code's intent hard to understand
Although unittest does not have a huge API that needs to be remembered, it has too much support for abstraction, this makes the test code intent's unclear.
Con Verbose
Too much boilerplate code is needed.
Con May be losing support or cease altogether
According to documentation at https://nose.readthedocs.io/en/latest/, nose may become unsupported. There is a successor project called Nose2 (https://github.com/nose-devs/nose2), but it does not support all the features of its predecessor and recommends considering pytest for those new to testing.
Con Too much reliance on plugins
Having lots of plugins while beneficial, also can be a hindrance. Relying too much on them makes developers feel as if everything's being done by plugins which a lot of times are undocumented or have very little documentation.
