diff --git a/src/Adapter/MSTest.TestAdapter/Execution/TestClassInfo.cs b/src/Adapter/MSTest.TestAdapter/Execution/TestClassInfo.cs
index fe29c5998e..77023f6088 100644
--- a/src/Adapter/MSTest.TestAdapter/Execution/TestClassInfo.cs
+++ b/src/Adapter/MSTest.TestAdapter/Execution/TestClassInfo.cs
@@ -346,6 +346,11 @@ public void RunClassInitialize(TestContext testContext)
 
     internal UnitTestResult GetResultOrRunClassInitialize(ITestContext testContext, string initializationLogs, string initializationErrorLogs, string initializationTrace, string initializationTestContextMessages)
     {
+        if (IsClassInitializeExecuted)
+        {
+            return new UnitTestResult(ObjectModelUnitTestOutcome.Passed, null);
+        }
+
         bool isSTATestClass = AttributeComparer.IsDerived<STATestClassAttribute>(ClassAttribute);
         bool isWindowsOS = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
         if (isSTATestClass
diff --git a/src/Adapter/MSTest.TestAdapter/Execution/UnitTestRunner.cs b/src/Adapter/MSTest.TestAdapter/Execution/UnitTestRunner.cs
index 6d6e854add..0e7b634464 100644
--- a/src/Adapter/MSTest.TestAdapter/Execution/UnitTestRunner.cs
+++ b/src/Adapter/MSTest.TestAdapter/Execution/UnitTestRunner.cs
@@ -160,15 +160,25 @@ internal UnitTestResult[] RunSingleTest(TestMethod testMethod, IDictionary<strin
                 _fixtureTests.TryAdd(testMethod.AssemblyName, testMethodInfo);
                 _fixtureTests.TryAdd(testMethod.AssemblyName + testMethod.FullClassName, testMethodInfo);
 
-                UnitTestResult assemblyInitializeResult = RunAssemblyInitializeIfNeeded(testMethodInfo, testContext);
+                UnitTestResult? assemblyInitializeResult = null;
 
-                if (assemblyInitializeResult.Outcome != UnitTestOutcome.Passed)
+                if (!testMethodInfo.Parent.Parent.IsAssemblyInitializeExecuted)
+                {
+                    assemblyInitializeResult = RunAssemblyInitializeIfNeeded(testMethodInfo, testContext);
+                }
+
+                if (assemblyInitializeResult != null && assemblyInitializeResult.Outcome != UnitTestOutcome.Passed)
                 {
                     result = [assemblyInitializeResult];
                 }
                 else
                 {
-                    UnitTestResult classInitializeResult = testMethodInfo.Parent.GetResultOrRunClassInitialize(testContext, assemblyInitializeResult.StandardOut!, assemblyInitializeResult.StandardError!, assemblyInitializeResult.DebugTrace!, assemblyInitializeResult.TestContextMessages!);
+                    UnitTestResult classInitializeResult = testMethodInfo.Parent.GetResultOrRunClassInitialize(
+                        testContext,
+                        assemblyInitializeResult?.StandardOut ?? string.Empty,
+                        assemblyInitializeResult?.StandardError ?? string.Empty,
+                        assemblyInitializeResult?.DebugTrace ?? string.Empty,
+                        assemblyInitializeResult?.TestContextMessages ?? string.Empty);
                     DebugEx.Assert(testMethodInfo.Parent.IsClassInitializeExecuted, "IsClassInitializeExecuted should be true after attempting to run it.");
                     if (classInitializeResult.Outcome != UnitTestOutcome.Passed)
                     {