Unit Testing ASP.net Web Site Project code stored in App_Code

My shop has finally worked through an answer for this for our MVC project. And I want to share it as I chased a lot of dead ends here on StackOverflow hearing a lot of people say it couldn’t be done. We do it like this:

  • Open the MVC folder “as a website, from local iis” which gets intellisense and debugging working properly
  • Add a unit test project that lives in our source controlled directory
  • Add a pre-build step to the TEST project, since we can’t add one to a project that is open as a website. Imagine website is \FooSite and
    our test project is \FooSite.Tests. The compiled app code will end up
    in FooSite.Tests\FooSite_Precompiled\bin.
  • *

<Target Name="BeforeBuild">
     <AspNetCompiler VirtualPath="FooSite" TargetPath="$(ProjectDir)\FooSite_Precompiled" Force="true"
 Debug="true" />   </Target>
  • Add a reference to the FooSite_Precompiled/bin/App_Code.dll in your test project.
  • Boom that’s it. You can have your cake and eat it too. Every time you click Build in your solution you call the aspnet_compiler.ext tool
    on your website csproj (which does still exist) which is able, unlike
    MSBuild, to compile app_code, and the Debug=”true” allows you step
    into the app_code.dll code when debugging your unit test. And you
    only need to Build when you’re running updated unit tests. When
    you’re looking at the effects of your change on the page, you just
    Change Code/Save/Refresh Page since the app_code folder dynamically
    compiles when called from your web server.

Leave a Comment