Asp.net

儲存在 App_Code 中的單元測試 ASP.net 網站項目程式碼

  • July 29, 2009

我有一個 ASP.net 網站項目 (.net 3.5)。目前所有非程式碼隱藏在程式碼文件(包括 Linq2Sql 的東西、數據上下文、業務邏輯、擴展方法等)都位於 App_Code 文件夾中。

我有興趣在項目的至少某些部分中引入單元測試(使用 nunit)。我將要進行的任何單元測試都需要對目前位於 App_Code 文件夾中的所有程式碼具有完全訪問權限。到目前為止,我已經做了一些初步閱讀,共識似乎是:

  • 鑑於我目前的設置,這將是不可能的
  • 單元測試需要引用作為已編譯 dll 一部分的類,並且根據定義,網站項目僅在執行時編譯。
  • 為了繼續,我需要將整個項目轉換為 Web 應用程序,或者將我想要測試的所有程式碼(即:App_Code 的全部內容)移動到類庫項目並引用類庫網站項目中的項目。其中任何一個都將提供對我需要的已編譯 dll 格式的類的訪問,這將允許我對它們進行單元測試。

它是否正確?還是有另一種方法可以在不重組/重構整個項目的情況下進行單元測試?

你的結論似乎是正確的。我會投票贊成將功能轉移到一個或多個類庫項目中,因為這也可能為在其他項目中重用相同的功能打開大門。

我的商店終於為我們的 MVC 項目解決了這個問題。我想分享它,因為我在 StackOverflow 上追逐了很多死胡同,聽到很多人說它無法完成。我們這樣做:

  • 打開 MVC 文件夾“作為網站,來自本地 iis”,它可以讓智能感知和調試正常工作

  • 添加一個單元測試項目,該項目位於我們的原始碼控制目錄中

  • 將預建構步驟添加到 TEST 項目,因為我們無法將一個預建構步驟添加到作為網站打開的項目中。假設網站是\FooSite,我們的測試項目是\FooSite.Tests。編譯後的應用程式碼將在 FooSite.Tests\FooSite_Precompiled\bin 中結束。

<Target Name="BeforeBuild">
    <AspNetCompiler VirtualPath="FooSite" TargetPath="$(ProjectDir)\FooSite_Precompiled" Force="true"
Debug="true" />   </Target>
  • 在您的測試項目中添加對 FooSite_Precompiled/bin/App_Code.dll 的引用。
  • 轟就是這樣。你可以吃蛋糕也可以吃。每次在解決方案中點擊 Build 時,您都會呼叫網站 csproj(仍然存在)上的 aspnet_compiler.ext 工具,與 MSBuild 不同,該工具能夠編譯 app_code,並且 Debug=“true” 允許您進入 app_code。調試單元測試時的dll程式碼。而且您只需要在執行更新的單元測試時進行建構。當您查看更改對頁面的影響時,您只需更改程式碼/保存/刷新頁面,因為 app_code 文件夾在從 Web 伺服器呼叫時會動態編譯。

引用自:https://stackoverflow.com/questions/1198555