我有一个针对.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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这引发以下异常:
测试方法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上进行复制。
在阅读了沃恩·弗农(Vaughn Vernon)的《实现领域驱动的设计》之后,我对至少一件事感到困惑。他在第12章存储库中说,事务是在应用程序层中管理的。但是他还说,聚合是事务一致性边界的同义词。而且由于存储库提供了对聚合的全局访问,所以为什么不能在存储库中管理事务?是因为规则聚集==事务一致性边界只是有时必须打破的经验法则,还是还有其他内容?