diff --git a/test/TestAssets/TestProjects/ConsoleAppDoesNothing/ConsoleAppDoesNothing.csproj b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/ConsoleAppDoesNothing.csproj
new file mode 100644
index 000000000000..ab23dba54c44
--- /dev/null
+++ b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/ConsoleAppDoesNothing.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+ $(CurrentTargetFramework)
+ Exe
+ false
+ true
+
+
+
\ No newline at end of file
diff --git a/test/TestAssets/TestProjects/ConsoleAppDoesNothing/Program.cs b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/Program.cs
new file mode 100644
index 000000000000..1d284322c152
--- /dev/null
+++ b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/Program.cs
@@ -0,0 +1,17 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace ConsoleAppDoesNothing;
+
+public class Program
+{
+ ///
+ /// A console application that does "nothing" - just exits without any handshake or testing platform interaction.
+ /// This is used to test dotnet test behavior with non-MTP console applications.
+ ///
+ public static void Main(string[] args)
+ {
+ // Intentionally does nothing - no handshake, no test framework, just exits
+ // This simulates a regular console app that doesn't implement MTP protocol
+ }
+}
\ No newline at end of file
diff --git a/test/TestAssets/TestProjects/ConsoleAppDoesNothing/dotnet.config b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/dotnet.config
new file mode 100644
index 000000000000..da0410e32d54
--- /dev/null
+++ b/test/TestAssets/TestProjects/ConsoleAppDoesNothing/dotnet.config
@@ -0,0 +1,2 @@
+[dotnet.test.runner]
+name = "Microsoft.Testing.Platform"
diff --git a/test/dotnet.Tests/CommandTests/Test/GivenDotnetTestRunsConsoleAppWithoutHandshake.cs b/test/dotnet.Tests/CommandTests/Test/GivenDotnetTestRunsConsoleAppWithoutHandshake.cs
new file mode 100644
index 000000000000..5361c097f0b7
--- /dev/null
+++ b/test/dotnet.Tests/CommandTests/Test/GivenDotnetTestRunsConsoleAppWithoutHandshake.cs
@@ -0,0 +1,33 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Microsoft.DotNet.Cli.Commands.Test;
+using CommandResult = Microsoft.DotNet.Cli.Utils.CommandResult;
+using ExitCodes = Microsoft.NET.TestFramework.ExitCode;
+
+namespace Microsoft.DotNet.Cli.Test.Tests
+{
+ public class GivenDotnetTestRunsConsoleAppWithoutHandshake : SdkTest
+ {
+ public GivenDotnetTestRunsConsoleAppWithoutHandshake(ITestOutputHelper log) : base(log)
+ {
+ }
+
+ [InlineData(TestingConstants.Debug)]
+ [InlineData(TestingConstants.Release)]
+ [Theory]
+ public void RunConsoleAppDoesNothing_ShouldReturnCorrectExitCode(string configuration)
+ {
+ // This test validates the behavior when running `dotnet test` against a console application
+ // that does "nothing" and doesn't handshake with us.
+ TestAsset testInstance = _testAssetsManager.CopyTestAsset("ConsoleAppDoesNothing", Guid.NewGuid().ToString())
+ .WithSource();
+
+ CommandResult result = new DotnetTestCommand(Log, disableNewOutput: false)
+ .WithWorkingDirectory(testInstance.Path)
+ .Execute(TestingPlatformOptions.ConfigurationOption.Name, configuration);
+
+ result.ExitCode.Should().Be(ExitCodes.GenericFailure, "dotnet test should fail with a meaningful error when run against console app without MTP handshake");
+ }
+ }
+}
\ No newline at end of file