为了账号安全,请及时绑定邮箱和手机立即绑定

如何防止在单元测试中自动包含导航属性

如何防止在单元测试中自动包含导航属性

C#
慕盖茨4494581 2023-08-20 10:21:40
我目前正在开发一个应用程序商店风格的 API,它具有以下实体(以及许多其他实体,但与问题无关):App(与 AppRevision 的一对多关系 - 包含 IEnumerable 属性)应用程序修订版安装我遇到了一个奇怪的问题,其中 EF 的行为在单元测试中与实际运行 API 时不同,因为在单元测试时会自动包含导航属性。从我的命令处理程序中获取以下代码片段:// MyComp<div id=“@Id” @attributes=“InputAttributes”></div>@code {    [Parameter]     public string Id { get; set; }     [Parameter(CaptureUnmatchedValues = true)]    public Dictionary<string, object> InputAttributes { get; set; }}根据上面的示例定义参数将使其收集组件上定义的与任何现有声明的参数不匹配的任何属性。用法:<MyComp Id=“foo” class=“myclass” />将呈现:<div id=“foo” class=“myclass”></div>
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

对于将来遇到这篇文章的任何人,解决方案是根据原始问题的评论,使用单独的上下文来播种测试数据并稍后在测试中获取数据:


[Fact]

public async void Handle_ShouldAddInstallationRecord_WhenDataIsValid()

{

    Guid testGuid = Guid.NewGuid();


    CreateInstallationCommand command = new CreateInstallationCommand(testGuid, "ABC", "abc@abc.com", null);


    using (TestContextFactory contextFactory = new TestContextFactory())

    {

        using (TestContext seedContext = contextFactory.CreateTestContext())

        {

            seedContext.Apps.Add(new App() { Id = testGuid });

            seedContext.AppRevisions.Add(new AppRevision() { Id = Guid.NewGuid(), AppId = testGuid, Status = AppRevisionStatus.Approved, IsListed = true });

            await seedContext.SaveChangesAsync();

        }


        using (TestContext getContext = contextFactory.CreateTestContext())

        {

            CreateInstallationCommandHandler handler = new CreateInstallationCommandHandler(getContext);


            CommandResult result = await handler.Handle(command, new CancellationToken());


            Assert.True(result);

            Assert.Single(getContext.Installations);

        }

    }

}


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信