diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs index ca584ea9c43..520df4f6c12 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/GH1594/Fixture.cs @@ -62,8 +62,13 @@ public async Task ExecutionContextLocalValuesLeakAsync() { await (RunInTransactionAsync(session)); var localValuesCountAfterFirstCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterFirstCall.HasValue) + Assert.Ignore("Unable to get async local values count"); await (RunInTransactionAsync(session)); var localValuesCountAfterSecondCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterSecondCall.HasValue) + Assert.Ignore("Unable to get async local values count"); + Assert.AreEqual(localValuesCountAfterFirstCall, localValuesCountAfterSecondCall); } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs b/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs index efc3f52831e..70d82885768 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1594/ExecutionContextExtensions.cs @@ -5,7 +5,7 @@ namespace NHibernate.Test.NHSpecificTest.GH1594 { public static class ExecutionContextExtensions { - public static int LocalValuesCount(this ExecutionContext c) + public static int? LocalValuesCount(this ExecutionContext c) { #if NETFX const string localValuesFieldName = "_localValues"; @@ -13,8 +13,10 @@ public static int LocalValuesCount(this ExecutionContext c) const string localValuesFieldName = "m_localValues"; #endif var f = typeof(ExecutionContext).GetField(localValuesFieldName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); - var d = (IDictionary) f.GetValue(c); - return d?.Count ?? 0; + // The property value may not implement IDictionary, especially when there is less than 4 values, but not only. + // So we may not be able to know anything about this count. + var d = f.GetValue(c) as IDictionary; + return d?.Count; } } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs index 0f0118cb56a..7c342aa2dbf 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1594/Fixture.cs @@ -50,8 +50,13 @@ public void ExecutionContextLocalValuesLeak() { RunInTransaction(session); var localValuesCountAfterFirstCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterFirstCall.HasValue) + Assert.Ignore("Unable to get async local values count"); RunInTransaction(session); var localValuesCountAfterSecondCall = ExecutionContext.Capture().LocalValuesCount(); + if (!localValuesCountAfterSecondCall.HasValue) + Assert.Ignore("Unable to get async local values count"); + Assert.AreEqual(localValuesCountAfterFirstCall, localValuesCountAfterSecondCall); } }