Made the switch to Subversion, back to NUnit from VSTS

After about two years of using SourceGear's Vault, I switched to Subversion for source control. I was using Vault because it was free, Web-based, integrated with Visual Studio and was generally familiar.

Now I need to get more people into the loop on a particular project, and that makes Vault not free anymore. Since I've managed to hold down a day job, for more than a year, and actually like it, I've had lots of exposure to Subversion, and I really dig it. It's "free," it's fast and since the popular TortoiseSVN is a shell extension instead of yet another client, it's very easy to use. You just need to remember to add/delete from Explorer and not simply delete stuff from your Visual Studio solution explorer. Branching and merging is like magic.

I have to tell you though, getting there was not easy. Subversion's daemon was not something I felt could work right on a Windows server with IIS, so I installed Apache instead. After a lot of messing around, I did get it to coexist with IIS. The world of config files is a strange world for us Windows monkeys, and even more strange for those of us with the minimum set of skills to make a Web server work. It's a good example of why I tend to steer clear of open source software, but Subversion is that compelling. If people with time and inspiration went beyond the installer builds (don't think those make success easy), the entire world would switch and never go back.

I also went back to using NUnit instead of the VSTS testing suite. My reasoning at first was just that the UI around VSTS testing sucks. It seemed backward to me from the start. When I gave Resharper a try, and saw the UI that integrates with NUnit, that was the end of it. I'll be buying Resharper as soon as my trial expires, for sure. The only thing I miss from VSTS is the PrivateObject class, but can I generally get along without it.


  • Why didn't you use the built in Subversion server? (not being sarcastic or anything, I'd honestly like to know).

  • Hi Jeff,

    I haven't used VSTS but if PrivateObject is the ability to test private methods then mbUnit has added support for that in their latest release.


  • Jeff,

    Just so you know, there are Windows based wizards out there for subversion. You have to do some searching for them, but generally they make setting up a subversion server very easy (more like what you'd be used to with Vault or VSS). You don't have to monkey around with the config files, you just select or type and press next.

  • Why was it necessary to run it under Apache? svnserve runs as a Windows service, and it's not too hard to set up:

  • Apache is necessary for advanced security configuration and other extras.

  • Agreed, that and it's apparently a real pain to get svnserve to coexist with IIS. A guy I trust felt pretty strongly about that. It also looks like it stores passwords in plain text, which I'd prefer not to do.

  • > Agreed, that and it's apparently a real pain to get svnserve to coexist with IIS.

    What did he mean by "coexist"? I have IIS and svnserve running on the same server with no problems at all.

  • PrivateObject is used for testing private methods and as John points out has been added to MbUnit 2.4 beta 1 you can see how it works here.

    MbUnit 2.4 beta 1 can be found at



  • You may want to check out the AnkhSVN plug-in for Visual Studio .NET, which integrates very well, and best of all, doesn't actually use the MSCC provider model that most VS source control plugins use.

  • Regarding PrivateObject, simply create a BaseFixture class which uses reflection and let your fixture inherit from it.

    Here's a simple and cut down version.

    public class BaseFixture
    public BaseFixture()

    public object InvokePrivateMethod(object o, string methodname, object[] args)
    return o.GetType().InvokeMember(methodname,
    BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,
    null, o, args);

    public object InvokePrivateStaticMethod(Type t, string methodname, object[] args)
    return t.InvokeMember(methodname,
    BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod,
    null, null, args);

  • I saw a post on the JetBrains blog yesterday this week about using VSTS test in the Unit Tester. I have not tried it yet since I am not using VSTS for testing but I would trust JetBrains not to link to something that would make Resharper look bad.

  • I wouldn't recommend AnkhSVN... it's very heavy/slow/bloated (unless they've significantly improved it since last time I used it...) check out VisualSVN It's not free, but it's cheap and works much better IMO.

  • Aaron,
    If you haven't used AnkhSVN since the 1.0 release, I highly recommend that you give it another shot. I agree that most of the 0.x versions were unstable, to say the least, but apparently it matured really quickly and is now actually reliable. Check it out!

Comments have been disabled for this content.