Humble beginning
I come from (lately) Ruby, Java and Clojure and currently I’m working with some python projects and I was missing the way I used to test my code with rspec. After a quick research, I found three great projects that helps to make more readable tests, they are: py.test, Mock and sure.
Better assertions
I was missing a better way to make asserts into my tests. The option about using the plain assert is good but not enough and by using sure I could do some awesome code looking similar to rspec.
#instead of plain old assert
assert add(1, 4) == 5
#I'm empowered by
add(1, 4).should.be.equals(5)
[].should.be.empty
['chip8', 'schip8', 'chip16'].shouldnt.be.empty
[1, 2, 3, 4].should.have.length_of(4)
And this makes all the difference, my test code now is more expressive.
Struggling with monkeypatch
The other challenge I was facing was to understand and use monkeypatch for mocks and stubs. I find easier to use the Mock library even though its @patch looks similar to monkeypatch but I could grasp it quickly.
#Stubing
def test_simple_math_remotely_stubed():
server = Mock()
server.computes_add = Mock(return_value=3)
add_remotely(1, 2, server).should.be.equals(3)
#Mocking
def test_simple_math_remotely_mocked():
server = Mock()
add_remotely(1, 2, server)
server.computes_add.assert_called_once_with(1, 2)
#Stubing an internal dependency
@patch('cmath.nasa.random')
def test_simple_math_with_randon_generated_by_nasa(nasa_random_generator):
nasa_random_generator.configure_mock(return_value=42)
add_and_sum_with_rnd(3, 9).should.be.equals(54)
#Mocking an internal dependency
@patch('cmath.mailer.send')
def test_simple_math_that_sends_email(mailer_mock):
add_and_sends_email(3, 9)
mailer_mock.assert_called_once_with(
to='master@math.com',
subject='Complex addition',
body='The result was 12')
Make sure you
- Are using virtualenv for better lib version managment
- Have installed pytest, sure and mock
- Git cloned the project above to understand it.
You must be logged in to post a comment.