Hacker News new | ask | show | jobs
by simonw 1593 days ago
This is brilliant.

pytest is by far the most productive testing framework I've ever tried, for any language. It's so good that it switched me from treating tests as a necessary chore to actively enjoying writing them.

Using ctypes to exercise a C module like this is brilliant - especially the mechanisms used here to work around segmentation faults.

Reminds me of SQLite, which is written in C but uses TCL for most of its test suite.

1 comments

How do you add a side effect and still call the original in pytest? This is easy in rspec but everywhere I google people say there's no good way.

For example, you're calling code which internally does Too().bar() and you want to advance your time mock after it's called.

That… has nothing to do with pytest?

You’d probably use something like `wraps` or `side_effect` in `unittest.mock` to delegate to the original with some extra behaviours.

And / or use freezegun’s tick features, when you’re specifically dealing with time.

Replace the original function with a wrapper that calls the function then does the side effect.

This could effectively be something like a decorator.

As far as mocking time objects, look into pytest.freezegun. You should be able to control the date and time as you move forward.

I was able to mock out the datetime.now() at some point in the past. It wasn't with freezegun...

There are lots of good mocking fixtures available for pytest. I've used this one for clock stuff in the past: https://github.com/adamchainz/time-machine#pytest-plugin