我想将nunit的teardown属性与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()
测试名称:it_can_read_the_database测试 全名:tests.when_it_connects_to_database.it_can_read_the_database 测试 :第29行测试结果:测试持续时间失败:0:00:00.0000001
结果消息:OneTimeSetUp:SetUp或TearDown的无效签名 方法:System-IDisposable-Dispose
答案 0 :(得分:1)
如果Test Fixture实现了IDisposable,则在所有测试运行并且任何带有OneTimeTearDownAttribute
标记的方法运行后,NUnit会将其处置。
用TearDownAttribute
标记您的处理方法将意味着您尝试在每次测试之后处理该对象,并且显然在第一次测试之后不会进行任何健康测试。
您看到的实际错误消息似乎掩盖了您根本不应该为此方法使用TearDownAttribute
的事实。只需实现IDisposable,该对象将在适当的时间处理。