如何在.net6中使用WebApplicationFactory(没有可讲的入口点)

2024-03-25

在 ASP.NET Core 6 中,默认模板将所有内容从Startup.cs into Program.cs,并使用 Program.cs 中的顶级语句,因此不再有(可以说的)Program乙醚类。

这看起来很棒,但现在,我需要测试所有这些。WebApplicationFactory<T>仍然期望我通过入门级,但我不能这样做(因为它的名字现在难以形容)。

预计如何在 ASP.NET Core 6 中配置集成测试?


请注意,如果您尝试使用 xUnit 及其IClassFixture<T>模式,如果您只使用 InternalsVisibleTo 方法,您将会遇到问题。具体来说,你会得到这样的结果:

“可访问性不一致:基类WebApplicationFactory<Program>比课堂更难访问CustomWebApplicationFactory."

当然你可以通过以下方式解决这个问题CustomWebApplicationFactory内部,但它只会解决问题,因为现在您的单元测试类将给出相同的错误。当您尝试在那里更改它时,您会发现 xUnit 要求测试具有公共构造函数(而不是内部构造函数),并且您将被阻止。

该解决方案可以避免所有这些并允许您仍然使用IClassFixture<Program>是为了使Program类公开。显然,您可以通过摆脱 Program.cs 的神奇无类版本来做到这一点,但如果您不想完全更改该文件,您可以添加以下行:

public partial class Program { } // so you can reference it from tests

当然,一旦公开,您就可以在测试项目中使用它,并且一切正常。

顺便说一句,您通常更喜欢使用 IClassFixture 的原因是它允许您在测试类构造函数中仅设置一次 WebApplicationFactory,并获取一个HttpClient您可以将其存储为字段的实例。这允许您的所有测试更短,因为它们只需要引用客户端实例,而不是工厂。

Example:

public class HomePage_Get : IClassFixture<CustomWebApplicationFactory>
{
    private readonly HttpClient _client = new HttpClient();

    public HomePage_Get(CustomWebApplicationFactory factory)
    {
        _client = factory.CreateClient();
    }
    [Fact]
    public async Task IncludesWelcome()
    {
        HttpResponseMessage response = await _client.GetAsync("/");
        response.EnsureSuccessStatusCode();
        string stringResponse = await response.Content.ReadAsStringAsync();
        Assert.Contains("Welcome.", stringResponse);
    }
}

最后请注意Damian Edwards 的 MinimalAPIPlayground https://github.com/DamianEdwards/MinimalApiPlayground在我们讨论该问题后,已更新为使用此方法。看到这个commit https://github.com/DamianEdwards/MinimalApiPlayground/commit/2ffc975ee9eddc1587304bad8a88e5620860a392

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在.net6中使用WebApplicationFactory(没有可讲的入口点) 的相关文章

随机推荐

  • 使用 HTML 标签解析 JSON 数组以输出纯 HTML

    过去两天我一直在谷歌搜索这个 我无法完美地完成它 我认为 这属于或可以由某些模板引擎完成 但是 我无法找到所谓的引擎 我有这个JSON array我想将其解析回来或将其转换为纯 HTML 以将其输出到浏览器 tag figure child
  • Bash:如何在算术表达式中进行变量扩展?

    尝试编写一个简单的 bash 脚本来提供帮助 在我的部署过程中 我遇到了一个令人困惑的错误 bin bash WEEKDAY date u echo WEEKDAY DAYS TO WEDNESDAY 3 WEEKDAY echo DAYS
  • VS2010 debug/release.config 不起作用

    我的方法有点问题web debug config and web release config files 更具体地说 我的网页只会使用默认的web config文件 并完全忽略debug and release文件 不仅当我在本地运行项目
  • NoReverseMatch at / urlresolvers 的反向错误,get_absolute_url()

    函数 get absolute url 中 url reverse 出错 无法反转每个模型 serial slug 中的 url 但 url 本身存在 这是主 url py from django conf urls import incl
  • Android并发使用[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Android 有许多不同的便利措施可以在单独的线程上同时执行代码 但我不确定何时应该使用每种方法 或者这些不同方法的最佳实践是什么
  • 打印数组值两次 / php 和 pdo

    我收到 field value 两次 但为什么呢 正常的结构是
  • 在ggplot2散点图中使用伪彩色来表示密度

    有人知道如何创建像屏幕截图中那样的图表吗 我试图通过调整 alpha 来获得类似的效果 但这会使异常值几乎看不见 我只从一个名为 FlowJo 的软件中知道这种类型的图 这里他们将其称为 伪彩色点图 不确定这是否是官方术语 我想专门在 gg
  • ng-click 在动态创建的内容中不起作用

    我在 Angular 中有这个功能 我在其中添加了一个带有 ng click 的新幻灯片 var addSlide function scope slideIndex event slideIndex var slider angular
  • 通过 PHP 批量插入 MySQL 数据库会跳过名称

    我目前正在开发一个跟踪程序 可以同时跟踪数百个用户 但我遇到了一个有点烦人的问题 我让用户插入数据库的方法是通过 html 文本区域 然后将它们作为参数发送 总是有大约 60 人中的 7 人 也总是相同的名字 被插入到数据库中 但它没有插入
  • 创建具有不同单元格类型的分组 UITableview

    我需要创建一个分组的 uitableview 其中包括一些部分以及每个部分中可能不同的单元格类型 我正在尝试创建类似旧的 foursquare 应用程序 用户页面 包括 排行榜 朋友建议 朋友 统计数据 最探索的类别 部分 我对 ios 编
  • ASP.NET MVC 客户端验证

    我热衷于使用 ASP NET MVC 但我希望改进的领域之一是客户端验证 我知道最新版本 预览版 5 有很多用于验证的新功能 但它们似乎都是在页面发布之后 我看过一篇有趣的文章史蒂夫 桑德森 http blog codeville net
  • 没有这样的模块 Crashlytics - Pod 似乎丢失了

    我经常收到错误 No such module Crashlytics 我通常会花费数小时清理构建文件夹 重新安 装所有内容 运行 pod install 等来解决该问题 但我对此感到厌倦 并希望一劳永逸地解决该问题 我的 podfile 包
  • Mongoose 验证外键(参考)

    我尝试了几种不同的方法来验证 Mongoose 中的外键 但无法弄清楚 我有一个这样的架构 Doctors js var schema mongoose Schema email type String module exports mon
  • 使用 Django 上传表单清空 Request.FILES

    尝试使用非常简单的形式将文件上传到新的类实例中 我希望这两个文件都在request FILES但它是空的 我在捆绑的开发服务器上 被困在这里并解决了所有相关问题 wayfinder map media file request FILES
  • 复选框样式并使其选中

    从数据库检索到的复选框太长了 它是向下的 有什么办法使它成为四层 单击 所有字段 复选框时 必须选中所有复选框 这要怎么做呢 我的代码 protected function getConfigForm sql SELECT id order
  • 检查字符串中的字符是否都是唯一的

    我正在尝试使用 JS 通过数组来解决这个问题 var str abcdefgh for i 0 i lt 255 i arr i false function check for i 0 i lt str length i if arr s
  • 如何从实体管理器获取 jpa 数据源属性

    大家好 我想知道是否可以通过实体管理器获取数据库连接属性 我的 persistence xml 看起来像这样
  • 暂停事件在 PhoneGap iPhone 中无法正常工作?

    这是我的代码 This is an event that fires when a PhoneGap application is put into the background document addEventListener paus
  • Go 语言中的打印格式列表

    只是想知道使用 fmt 包的功能的打印格式列表 例如 v 用于打印值 T 可以打印值的类型 还有什么 动词 格式列表可在fmt 包的文档 http golang org pkg fmt General v the value in a de
  • 如何在.net6中使用WebApplicationFactory(没有可讲的入口点)

    在 ASP NET Core 6 中 默认模板将所有内容从Startup cs into Program cs 并使用 Program cs 中的顶级语句 因此不再有 可以说的 Program乙醚类 这看起来很棒 但现在 我需要测试所有这些