From df2a5647ae2e0875845b26c638ad76a946cab329 Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Mon, 6 Jan 2025 16:22:55 -0500 Subject: [PATCH 1/7] Replace assembly-wide hook for C# --- .../build/NUnit.AssemblyHooks.template.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs index b04eee1f2..aa80afd31 100644 --- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs +++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs @@ -6,10 +6,9 @@ using global::System.Runtime.CompilerServices; using System.Threading.Tasks; -[assembly: NUnit.Framework.FixtureLifeCycle(NUnit.Framework.LifeCycle.InstancePerTestCase)] - [GeneratedCode("Reqnroll", "REQNROLL_VERSION")] [global::NUnit.Framework.SetUpFixture] +[NUnit.Framework.FixtureLifeCycle(NUnit.Framework.LifeCycle.InstancePerTestCase)] public static class PROJECT_ROOT_NAMESPACE_NUnitAssemblyHooks { [global::NUnit.Framework.OneTimeSetUp] From f3809008d2b59aa104a453d140bac4473d317a47 Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Mon, 6 Jan 2025 16:23:01 -0500 Subject: [PATCH 2/7] Replace assembly-wide hook for VB --- .../build/NUnit.AssemblyHooks.template.vb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb index de1925645..b861d7124 100644 --- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb +++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb @@ -7,9 +7,8 @@ Imports System.CodeDom.Compiler Imports System.Reflection Imports System.Runtime.CompilerServices - - + Public NotInheritable Class PROJECT_ROOT_NAMESPACE_NUnitAssemblyHooks From da280d78b7de5863192ec1ca8e60c9e5d5f4bb45 Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Tue, 7 Jan 2025 07:46:00 -0500 Subject: [PATCH 3/7] change for CS --- .../build/NUnit.AssemblyHooks.template.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs index aa80afd31..30df87264 100644 --- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs +++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs @@ -8,7 +8,7 @@ [GeneratedCode("Reqnroll", "REQNROLL_VERSION")] [global::NUnit.Framework.SetUpFixture] -[NUnit.Framework.FixtureLifeCycle(NUnit.Framework.LifeCycle.InstancePerTestCase)] +[global::NUnit.Framework.FixtureLifeCycle(NUnit.Framework.LifeCycle.InstancePerTestCase)] public static class PROJECT_ROOT_NAMESPACE_NUnitAssemblyHooks { [global::NUnit.Framework.OneTimeSetUp] From 54584985f3616b7310711a05906d12f4852deddc Mon Sep 17 00:00:00 2001 From: Sean Killeen Date: Tue, 7 Jan 2025 07:46:03 -0500 Subject: [PATCH 4/7] change for VB --- .../build/NUnit.AssemblyHooks.template.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb index b861d7124..a4bdef08f 100644 --- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb +++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb @@ -8,7 +8,7 @@ Imports System.Reflection Imports System.Runtime.CompilerServices - + Public NotInheritable Class PROJECT_ROOT_NAMESPACE_NUnitAssemblyHooks From 302b3e9830741d4086ec8267e64599d5445b6944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1sp=C3=A1r=20Nagy?= Date: Wed, 5 Feb 2025 15:51:40 +0100 Subject: [PATCH 5/7] add FixtureLifeCycleAttribute to generetd classes --- .../build/NUnit.AssemblyHooks.template.cs | 2 +- Reqnroll.Generator/CodeDom/CodeDomHelper.cs | 9 +++++++-- .../UnitTestProvider/NUnit3TestGeneratorProvider.cs | 6 ++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs index 30df87264..1b0753013 100644 --- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs +++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs @@ -8,7 +8,7 @@ [GeneratedCode("Reqnroll", "REQNROLL_VERSION")] [global::NUnit.Framework.SetUpFixture] -[global::NUnit.Framework.FixtureLifeCycle(NUnit.Framework.LifeCycle.InstancePerTestCase)] +[global::NUnit.Framework.FixtureLifeCycle(global::NUnit.Framework.LifeCycle.InstancePerTestCase)] public static class PROJECT_ROOT_NAMESPACE_NUnitAssemblyHooks { [global::NUnit.Framework.OneTimeSetUp] diff --git a/Reqnroll.Generator/CodeDom/CodeDomHelper.cs b/Reqnroll.Generator/CodeDom/CodeDomHelper.cs index 4a9e8e5f7..17222fd72 100644 --- a/Reqnroll.Generator/CodeDom/CodeDomHelper.cs +++ b/Reqnroll.Generator/CodeDom/CodeDomHelper.cs @@ -290,13 +290,18 @@ private CodeExpression GetAwaitedMethodThisTargetObject(CodeExpression thisExpre } public string GetGlobalizedTypeName(Type type) + { + return GetGlobalizedTypeName(type.FullName!); + } + + public string GetGlobalizedTypeName(string typeName) { if (TargetLanguage == CodeDomProviderLanguage.CSharp) { - return "global::" + type.FullName!; + return "global::" + typeName; } // Global namespaces not yet supported in VB - return type.FullName!; + return typeName; } public CodeExpression CreateOptionalArgumentExpression(string parameterName, CodeVariableReferenceExpression valueExpression) diff --git a/Reqnroll.Generator/UnitTestProvider/NUnit3TestGeneratorProvider.cs b/Reqnroll.Generator/UnitTestProvider/NUnit3TestGeneratorProvider.cs index 1b73a36c6..67d80a8a1 100644 --- a/Reqnroll.Generator/UnitTestProvider/NUnit3TestGeneratorProvider.cs +++ b/Reqnroll.Generator/UnitTestProvider/NUnit3TestGeneratorProvider.cs @@ -14,6 +14,9 @@ public class NUnit3TestGeneratorProvider : IUnitTestGeneratorProvider protected internal const string TESTFIXTURETEARDOWN_ATTR_NUNIT3 = "NUnit.Framework.OneTimeTearDownAttribute"; protected internal const string NONPARALLELIZABLE_ATTR = "NUnit.Framework.NonParallelizableAttribute"; protected internal const string TESTFIXTURE_ATTR = "NUnit.Framework.TestFixtureAttribute"; + protected internal const string FIXTURELIFECYCLE_ATTR = "NUnit.Framework.FixtureLifeCycleAttribute"; + protected internal const string LIFECYCLE_CLASS = "NUnit.Framework.LifeCycle"; + protected internal const string LIFECYCLE_INSTANCEPERTESTCASE = "InstancePerTestCase"; protected internal const string TEST_ATTR = "NUnit.Framework.TestAttribute"; protected internal const string ROW_ATTR = "NUnit.Framework.TestCaseAttribute"; protected internal const string CATEGORY_ATTR = "NUnit.Framework.CategoryAttribute"; @@ -70,6 +73,9 @@ public void SetTestClass(TestClassGenerationContext generationContext, string fe { CodeDomHelper.AddAttribute(generationContext.TestClass, TESTFIXTURE_ATTR); CodeDomHelper.AddAttribute(generationContext.TestClass, DESCRIPTION_ATTR, featureTitle); + CodeDomHelper.AddAttribute(generationContext.TestClass, FIXTURELIFECYCLE_ATTR, + new CodeAttributeArgument( + new CodeSnippetExpression($"{CodeDomHelper.GetGlobalizedTypeName(LIFECYCLE_CLASS)}.{LIFECYCLE_INSTANCEPERTESTCASE}"))); } public void SetTestClassCategories(TestClassGenerationContext generationContext, IEnumerable featureCategories) From a81db44e16e016b23e7913c7d0d34b6f6b60c9c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1sp=C3=A1r=20Nagy?= Date: Wed, 5 Feb 2025 15:58:24 +0100 Subject: [PATCH 6/7] Add CHANGELOG entry --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c6e99692..135c207e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,8 +13,9 @@ * Fix: Replace deprecated dependency `Specflow.Internal.Json` with `System.Text.Json`. The dependency was used for laoding `reqnroll.json`, for Visual Studio integration and for telemetry. (#373) * Fix: Support loading plugin dependencies from .deps.json on .NET Framework and Visual Studio MSBuild (#408) +* Fix: Error with NUnit 4: "Only static OneTimeSetUp and OneTimeTearDown are allowed for InstancePerTestCase mode" (#379) -*Contributors of this release (in alphabetical order):* @clrudolphi, @obligaron, @olegKoshmeliuk +*Contributors of this release (in alphabetical order):* @clrudolphi, @gasparnagy, @obligaron, @olegKoshmeliuk, @SeanKilleen # v2.2.1 - 2024-11-08 From e206476a39e812e9e9a29c4cba72af6e2ab87d12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1sp=C3=A1r=20Nagy?= Date: Thu, 6 Feb 2025 17:18:55 +0100 Subject: [PATCH 7/7] Remove FixtureLifeCycle attribute from SetupFixture classes --- .../build/NUnit.AssemblyHooks.template.cs | 1 - .../build/NUnit.AssemblyHooks.template.vb | 1 - 2 files changed, 2 deletions(-) diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs index 1b0753013..e1ad16413 100644 --- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs +++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.cs @@ -8,7 +8,6 @@ [GeneratedCode("Reqnroll", "REQNROLL_VERSION")] [global::NUnit.Framework.SetUpFixture] -[global::NUnit.Framework.FixtureLifeCycle(global::NUnit.Framework.LifeCycle.InstancePerTestCase)] public static class PROJECT_ROOT_NAMESPACE_NUnitAssemblyHooks { [global::NUnit.Framework.OneTimeSetUp] diff --git a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb index a4bdef08f..8495e1aac 100644 --- a/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb +++ b/Plugins/Reqnroll.NUnit.Generator.ReqnrollPlugin/build/NUnit.AssemblyHooks.template.vb @@ -8,7 +8,6 @@ Imports System.Reflection Imports System.Runtime.CompilerServices - Public NotInheritable Class PROJECT_ROOT_NAMESPACE_NUnitAssemblyHooks