Dot-Net

使用 .NET Framework 集成測試 ASP.NET Core - 找不到 deps.json

  • March 12, 2019

我有一個面向 .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。

  1. 創建New Project-> xUnit Test Project(.Net Core)
  2. 右鍵點擊新項目->編輯.csproj->更改TargetFrameworknet47
  3. 將項目引用添加到TestRepro
  4. 安裝包Microsoft.AspNetCore.Mvc.Testing
  5. 添加如下測試文件
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");
   }

}
  1. 執行測試項目

我剛剛遇到了同樣的問題,發現根本原因非常模糊。從文件中,.deps文件應該被複製到集成測試項目的 bin 目錄中。這對我來說沒有發生,因為沒有從我的集成測試項目中明確引用包。Microsoft.AspNetCore.Mvc.Testing我創建了一個共享庫,其中包含一些引用該 nuget 包的實用程序函式,因此我的集成測試項目間接引用了它。

包中有一些自定義建構任務會為您Microsoft.AspNetCore.Mvc.Testing複製引用的服務deps.json文件,因此您必須直接從集成測試項目中引用它才能執行這些建構任務。

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