Open perlun opened 1 month ago
(Hmm, I realize that making the OneTimeTearDown
method be public async Task OneTimeTearDown()
and just calling _msSqlContainer.DisposeAsync()
works fine. :see_no_evil: Perhaps this is just to be considered as user error on my part? :grin:
I saw an exception message about async void
methods not working as setup/teardown methods in NUnit but incorrectly thought it meant that all async was forbidden... which is not the case, only async void
, which is very understandable)
I thought the rule recognized DisposeAsync
?
Can you try
public Task OneTimeTearDown() {
await _msSqlContainer.DisposeAsync();
}
I should have read your second email before responding.
Yeah, but no worries. :+1: If we really wanted to make it perfect, I guess we could make the rule (or another rule...) warn about DisposeAsync()
being used in a non-async OneTimeTearDown
-method or something... but perhaps that's overly ambitious. :slightly_smiling_face:
warn about
DisposeAsync()
being used in a non-asyncOneTimeTearDown
-method
That is more generic than NUnit and hold for all Async inside non-Async method.
The Microsoft.VisualStudio.Threading.Analyzers does raise a warning for this:
Hi,
With the following test class:
...I get a warning/error saying
17>SomeControllerTests.cs(84,28): Error NUnit1032 : The field _msSqlContainer should be Disposed in a method annotated with [OneTimeTearDownAttribute] (https://github.com/nunit/nunit.analyzers/tree/master/documentation/NUnit1032.md)
I realize why this happens; the
MsSqlContainer
(from https://dotnet.testcontainers.org/modules/mssql/) doesn't implement theIDisposable
interface but onlyIAsyncDisposable
, which is why we have to do it this way in theOneTimeTearDown
method.Should we consider this a shortcoming/deficiency in NUnit(.Analyzers) or should this be reported upstream to TestContainers.NET, WDYT? :thinking: