VS2010 Command Prompt Here on the Windows Explorer Right Click Menu — the .reg File

VS2010 Command Line Here for Explorer Right Click Menu

To add a Visual Studio 2010 Command Prompt Here to your Explorer Right-Click menu, save this as a .reg file to your desktop, and then run it:

[code]Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Line VS2010]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Line VS2010\command]
@="cmd.exe /k echo on & pushd \"%1\" & \"C:\\Program Files\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86"[/code]

If you have 64-bit Windows, you'll need this:
[code]Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Line VS2010]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Line VS2010\command]
@="cmd.exe /k echo on & pushd \"%1\" & \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86"[/code]

How to create an NUnit test project that is also a self-running console app .exe

  1. Create your NUnit Test project as a Windows Console Application, not as a Class Library.
  2. Then make your main Program look like this:
    [csharp]
    [TestFixture]
    public class Program
    {
    static void Main(string[] args)
    {
    NUnit.ConsoleRunner.Runner.Main(
    new[]{Assembly.GetExecutingAssembly().Location }
    );
    }

    [TestCase("Aa - Bb")]
    public void WhenValidatingForename_should_accept_valid_characters(string validInput)
    {
    var result= new ClassUnderTest().Validate(validInput);
    Assert.IsTrue(result);
    }

    [TestCase("X<")]
    public void WhenValidatingForename_should_reject_invalid_characters(string invalidInput)
    {
    var result= new ClassUnderTest().Validate(invalidInput);
    Assert.IsFalse(result);
    }
    }[/csharp]

  3. Then, add a reference not only to nunit.framework.dll but also to nunit-console-runner.dll

You now have a self-running executable that runs all your tests, but still behaves in the usual way in a build script, or when running tests inside Visual Studio with TestRunner or Resharper or similar.
NB You may need to check if your build scripts are hard-coded to expect a Test project to be a .dll.

Web Forms – Mocking HttpSession

With thanks to http://stackoverflow.com/users/603670/ben-barreth
at http://stackoverflow.com/questions/1981426/how-do-i-mock-fake-the-session-object-in-asp-net-web-forms
[csharp]
[SetUp]
public void SetUpHttpSessionMock()
{
HttpWorkerRequest _wr = new SimpleWorkerRequest("/dummyWorkerRequest", @"c:\inetpub\wwwroot\dummy", "default.aspx", null, new StringWriter());
HttpContext.Current = new HttpContext(_wr);
HttpSessionStateContainer sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(), new HttpStaticObjectsCollection(), 10, true, HttpCookieMode.AutoDetect, SessionStateMode.InProc, false);
SessionStateUtility.AddHttpSessionStateToContext(HttpContext.Current, sessionContainer);
}
[/csharp]

Refactoring a static class with hard-coded dependencies for testability

is not that hard. You can add a factory method to the static class to create the dependency, and change the factory method at test-time.
Here's an example:
[csharp]
public static class WithDependencies
{
public static string MethodWithDependencies()
{
using (var thing = new HardCodedThing())
{
return DoSomething();
}
}
}
[/csharp]
which can be turned into:
[csharp]
public static class WithDependencies
{
public static Func<HardCodedThing> CreateHardCodedThing = () => new HardCodedThing();

public static void MethodWithDependencies()
{
using (var thing = CreateHardCodedThing())
{
DoSomething();
}
}
}
[/csharp]
With this code in your test:
[csharp]
[TestFixture]
public class WhenDoingSomething
{
private Mock<HardCodedThing> mockThing;

[SetUp]
public void SetUpMockThing()
{
// mockThing.Setup( ... ) ... etc ...
}

public void Given_hardcodedthing_does_X_should_get_Y()
{
//Arrange
WithDependencies.CreateHardCodedThing = () => mockThing.Object;
//Act
var result= WithDependencies.MethodWithDependencies();
//Assert
Assert.AreEqual("Y", result);
}
}[/csharp]