OneTimeSetUp:SetUp 或 TearDown 方法的签名无效:System-IDisposable-Dispose

OneTimeSetUp: Invalid signature for SetUp or TearDown method: System-IDisposable-Dispose

我想结合使用 nunit 的 teardownattribute 和 System.IDisposable 的实现,因为我想在 F# 中使用 use 关键字。为什么我在 运行 测试时收到此错误?

[<TestFixture>] 
type public when_it_connects_to_database() =
    interface IDisposable with
        [<TearDown>]
        member this.Dispose() =
            this.connection.Dispose()

    member val public connection : ApplicationDbContext = createdatabasegateway true
        with get, set

    [<TestCase(true)>]
    member public this.it_succeeds(testmode:bool) : ApplicationDbContext =
        this.connection <- createdatabasegateway testmode
        this.connection

    [<Test>]
    member public this.it_can_read_the_database() =
        this.connection.AvailableExchanges.AsEnumerable().Count()

Test Name: it_can_read_the_database Test FullName: tests.when_it_connects_to_database.it_can_read_the_database Test : line 29 Test Outcome: Failed Test Duration: 0:00:00.0000001

Result Message: OneTimeSetUp: Invalid signature for SetUp or TearDown method: System-IDisposable-Dispose

如果测试装置实现了 IDisposable,NUnit 在所有测试 运行 并且任何标有 OneTimeTearDownAttribute 的方法都有 运行.

之后处理它

TearDownAttribute 标记您的处置方法意味着您试图在 each 测试之后处置该对象,并且在第一次之后显然对任何测试都不健康.

您看到的实际错误消息似乎隐藏了这样一个事实,即您根本不应为此方法使用 TearDownAttribute。只需实施 IDisposable,对象就会在适当的时候被释放。