【问题标题】:Should WebApplicationFactory<> be disposed?应该处置 WebApplicationFactory<> 吗?
【发布时间】:2022-11-06 20:06:45
【问题描述】:

我有一个Asp.Net Core 6 Web Api 应用程序。

我按照推荐的here 使用WebApplicationFactory&lt;Program&gt; 进行了集成测试。我用IClassFixture&lt;WebAdminTestApplicationFactory&lt;Program&gt;&gt; 将它注入到xUnit 测试类中。

根据documentation

如果你的类拥有一个字段或属性,并且它的类型实现 IDisposable,包含类本身也应该实现 一次性的。实例化 IDisposable 实现的类 并将其存储为实例成员,还负责其 清理。

那么为什么集成测试的 MSDN 示例不将 WebApplicationFactory 作为字段处理?

不应该处置WebApplicationFactory 吗?因为它确实实现了 IDisposable。

【问题讨论】:

  • 鉴于 WebApplicationFactory&lt;T&gt;.Dispose 是一种非平凡的方法(即它处置东西)我认为你应该在您的IClassFixture 中调用.Dispose 或使用using 语句(或IAsyncDisposable 的任何等效语句)——尽管我不确定xUnit 是否支持IAsyncDisposable

标签: c# asp.net-core integration-testing xunit.net


【解决方案1】:

在这种情况下,您的测试类不会自己的WebApplicationFactory&lt;Program&gt;:它是由 xUnit 注入的,它会为您创建并调用 Dispose

Shared Context between Tests: Class Fixtures

使用类夹具时,xUnit.net 将确保在任何测试运行之前创建夹具实例,并且一旦所有测试完成,它将通过调用Dispose(如果存在)来清理夹具对象。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2019-10-13
    • 2016-09-05
    • 2014-08-10
    相关资源
    最近更新 更多