Richard Feldman
Posted on February 20, 2017
I came across a design question when working on elm-test recently:
What if you could write tests in the same file as the code they're testing?
There are a few testing systems that support this:
-
clojure.spec
(to vastly oversimplify) lets you define tests inline in the same file as your business logic. - Rust allows putting tests in the same file as the code being tested, although the documentation recommends putting them in a separate file (without elaboration as to why).
- Doctests (such as in Python, Elixir, Go, and Haskell) allow writing tests in the same file—theoretically for documentation purposes, although potentially for testing purposes instead.
-
EUnit
in Erlang runs all functions in a given module that end in_test
as tests, including business logic modules. - Racket supports inline tests.
- Pyret supports "testing blocks" which can live in any source file.
-
Test::Inline
adds support for this to Perl.
I've never used any of these, but I'm wondering how the experience would be in practice. Is it amazing? Unexciting? An outright bad idea? What are the pros and cons compared to putting tests in a separate file?
If you've tried writing tests like this before, what did you think?
💖 💪 🙅 🚩
Richard Feldman
Posted on February 20, 2017
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.