One of best working practice to improve unit tests coverage is to create failing test for each bug you encounter. It has some benefits, so I do this.
Here’s the deal: I’m working now on quite complex migration in my system and in some specific cases I got infinite loop. How can I detect infinite loop? So I could do something like:
test "should not fall in infitite loop" do // prepare conditions to infinite loop assert_no_infinite_loop do MyMode.make_some_fancy_stuff end end
I don’t know the solution, this is a open question.
Only thing I can think of is to create positive test with such conditions to, for instance, return nil. When everything is ok – I’ll have green test, when something is wrong – I’ll have never ending test ;)
ps. PhpUnit has something like @fast, @medium and @slow annotations which fails even successful tests if they take too long. But I guess it waits for the test to end…
pps. Maybe I should run it in separate thread and after some time kill it and fail test? Need to investigate this.