The tests for pvn raise an interesting question to me. The pvn subcommands that wrap/extend the svn subcommands process the svn output, so the tests need svn output to run.
I’ve considered doing mock objects for svn, but that became confounding, where I was essentially mocking all of the svn subcommands that I need. So I’m leaning in the direction of doing operations against a “real” Subversion repository. On a 234M Subversion repository, it takes around 0.4 seconds to do a backup (cp -r), when both the source and the target locations are on the SSD in my machine.
So it’s feasible for the test sequence to be:
- back up the svn repository (0.4 seconds)
- check out the svn repository checked out to working copy (4 seconds)
- working copy modified, with added, changed and deleted files and directories (< 10 seconds for all tests)
- svn repository restored to backed up version (1 second)
I’m still considering how to go about this, but in the meantime I’ve written the following for adding suite-wide setup and teardown for the pvn base testcase. Note that this is on a class:
require 'runit/testcase' module PVN class TestCase < RUNIT::TestCase include Loggable WIQUERY_DIRNAME = "/Programs/wiquery/trunk" class << self def setup @@orig_location = Pathname.pwd end def teardown Dir.chdir @@orig_location end def suite @@cls = self ste = super def ste.run(*args) @@cls.setup super @@cls.teardown end ste end end