使用 .NET Framework 集成測試 ASP.NET Core - 找不到 deps.json
我有一個面向 .NET Framework 4.7 的 ASP.NET Core Web API 項目,我正在嘗試為其編寫集成測試。我使用 Visual Studio 添加新項目和單元測試項目 (.NET Framework) 模板創建了一個單元測試項目。我將 Microsoft.AspNetCore.Mvc.Testing NuGet 包添加到測試項目中,並且我有以下測試:
using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestRepro.Tests { [TestClass] public class UnitTest1 { [TestMethod] public async Task TestMethod1() { var factory = new WebApplicationFactory<Startup>(); var client = factory.CreateClient(); var response = await client.GetAsync("/api/values"); } } }但這會引發以下異常:
測試方法TestRepro.Tests.UnitTest1.TestMethod1拋出異常:System.InvalidOperationException:找不到’[路徑已刪除]\TestRepro.Tests\bin\Debug\TestRepro.deps.json’。此文件是功能測試正常執行所必需的。您的源項目 bin 文件夾中應該有該文件的副本。如果不是這種情況,請確保在項目文件中將屬性 PreserveCompilationContext 設置為 true。例如“真實”。為了使功能測試正常工作,它們需要從建構輸出文件夾執行,或者必須將應用程序輸出目錄中的 TestRepro.deps.json 文件複製到執行測試的文件夾中。此錯誤的一個常見原因是在測試執行時啟用了卷影複製。
我已驗證 Web 應用程序輸出文件夾 (TestRepro\bin\Debug\net47) 中存在 TestRepro.deps.json,但它沒有復製到測試項目輸出文件夾 (TestRepro.Tests\bin\Debug)。而且我還沒有找到如何禁用卷影複製。
編輯: 文件說:
Microsoft.AspNetCore.Mvc.Testing 包處理以下任務: 將依賴項文件 (*.deps) 從 SUT 複製到測試項目的 bin 文件夾中。
但這似乎不起作用。我可以手動複製文件,但這在自動建構場景中不起作用。一種方法是在 TeamCity 中進行建構步驟,但感覺很粗糙。有任何想法嗎?
如果有幫助,我在 GitHub 上有一個 repro。
按照以下步驟為 Asp.Net Core 創建集成測試,目標為 net 47。
- 創建
New Project-> xUnit Test Project(.Net Core)- 右鍵點擊新項目->編輯.csproj->更改
TargetFramework為net47- 將項目引用添加到
TestRepro- 安裝包
Microsoft.AspNetCore.Mvc.Testing- 添加如下測試文件
public class BasicTests : IClassFixture<WebApplicationFactory<Startup> { private readonly WebApplicationFactory<Startup> _factory; public BasicTests(WebApplicationFactory<Startup> factory) { _factory = factory; } [Fact] public async Task TestMethod1() { var client = _factory.CreateClient(); var response = await client.GetAsync("/api/values"); } }
- 執行測試項目
我剛剛遇到了同樣的問題,發現根本原因非常模糊。從文件中,
.deps文件應該被複製到集成測試項目的 bin 目錄中。這對我來說沒有發生,因為沒有從我的集成測試項目中明確引用包。Microsoft.AspNetCore.Mvc.Testing我創建了一個共享庫,其中包含一些引用該 nuget 包的實用程序函式,因此我的集成測試項目間接引用了它。包中有一些自定義建構任務會為您
Microsoft.AspNetCore.Mvc.Testing複製引用的服務deps.json文件,因此您必須直接從集成測試項目中引用它才能執行這些建構任務。