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

后端 未结 8 1772
陌清茗
陌清茗 2020-12-01 01:43

I have an ASP.net Web Site Project (.net 3.5). Currently all of the non-code behind code files (including Linq2Sql stuff, data contexts, business logic, extension methods, e

相关标签:
8条回答
  • 2020-12-01 02:17

    It is possible to unit test classes stored in the App_Code folder without converting your project to a Web App or moving your classes to a Class Library project.

    All that is necessary is setting the code files' Build Actions to Compile. This will cause Debugging and Unit Testing your website to output a .dll file.

    Now when you reference your website project from the unit test project, the classes in the app_code folder will be visible.

    NOTE:

    Setting your .cs files' Build Action to Compile will cause your website to generate a .dll file on debugging and unit-testing. The .dll file will cause problems when you debug your website because IIS will now find your code in two places, the bin and the App_Code folder and will not know which one to use. I currently just delete the .dll file when I want to debug.

    0 讨论(0)
  • 2020-12-01 02:20

    And as the OP stated it's also possible to move to a Web App project, which i would say is cleaner as well, your pages can stay in the wep app project, you will have them in 1 DLL (testable). All your business logic etc. goes in a separate class library / libraries.

    0 讨论(0)
  • 2020-12-01 02:21

    We have this issue at my company (My boss doesn't like DLLs, some rubbish about versioning...)

    We have two ways round it that we use frequently:

    1) Get the CI tool to do the unit testing: We use TeamCity which has a pretty tight NUnit integration, and our solution builds quick enough (and has few enough tests) for this to be a valid option.

    2) Manually precompile and unit test the resulting binaries: It's perfectly possible to run the ASP.net compiler / MSBuild from the command line (as if you were doing a 'Publish' build) and just unit test the resulting binaries.

    However, if you have the option of segregating the code into binaries (class libraries) or just using a web application, I'd suggest that as a better alternative.

    0 讨论(0)
  • 2020-12-01 02:25

    Your conclusions seem correct. I would vote for moving functionality into one or several class library projects, since that may open the door for reusing the same functionality in other projects as well.

    0 讨论(0)
  • 2020-12-01 02:25

    It looks like this is possible whilst still using App_code, but I would either move this logic out to its own class library project or change the project type to Web Application, as Fredrik and Colin suggest.

    I always create my own ASP.NET projects as Web Application projects not Websites.

    0 讨论(0)
  • 2020-12-01 02:27

    I had to change Brian White's solution by adding the PhysicalPath attribute. In addition I am not using the Default Web Site and had to change the VirtualPath property to my website name.

    <Target Name="BeforeBuild">
        <AspNetCompiler VirtualPath="myIISsitename.com" PhysicalPath="$(SolutionDir)MySiteFolder" TargetPath="$(ProjectDir)\MySite_Precompiled" Force="true" Debug="true" />
    </Target>
    

    The resulting dll will be at MySite_Precompiled\App_Code.dll

    0 讨论(0)
提交回复
热议问题