diff --git a/NonWindowsTests.slnf b/NonWindowsTests.slnf
new file mode 100644
index 0000000000..e965c3ed7e
--- /dev/null
+++ b/NonWindowsTests.slnf
@@ -0,0 +1,14 @@
+{
+ "solution": {
+ "path": "TestFx.sln",
+ "projects": [
+ "test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests.csproj",
+ "test/IntegrationTests/MSTest.Acceptance.IntegrationTests/MSTest.Acceptance.IntegrationTests.csproj",
+ "test/UnitTests/Microsoft.Testing.Extensions.UnitTests/Microsoft.Testing.Extensions.UnitTests.csproj",
+ "test/UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj",
+ "test/UnitTests/Microsoft.Testing.Platform.UnitTests/Microsoft.Testing.Platform.UnitTests.csproj",
+ "test/UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests.csproj",
+ "test/UnitTests/MSTest.Analyzers.UnitTests/MSTest.Analyzers.UnitTests.csproj"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 7ab31f8fe6..a22ff006c7 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -94,14 +94,17 @@ stages:
displayName: Build
- ${{ if eq(parameters.SkipTests, False) }}:
- # -ci is allowing to import some environment variables and some required configurations
- # -nobl avoids overwriting build binlog with binlog from tests
- - script: Test.cmd
- -configuration $(_BuildConfig)
- -ci
- -nobl
+
+ # Because the build step is using -ci flag, restore is done in a local .packages directory.
+ # We need to pass NUGET_PACKAGES so that when dotnet test is doing evaluation phase on the projects, it can resolve .props/.targets from packages and import them.
+ # Otherwise, props/targets are not imported. It's important that they are imported so that IsTestingPlatformApplication ends up being set.
+ - script: $(Build.SourcesDirectory)/.dotnet/dotnet test -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\TestStep.binlog
name: Test
displayName: Test
+ env:
+ DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
+ NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages
+
# This step is only helpful for diagnosing some issues with vstest/test host that would not appear
# through the console or trx
@@ -157,13 +160,15 @@ stages:
displayName: Build
- ${{ if eq(parameters.SkipTests, False) }}:
- # --ci is allowing to import some environment variables and some required configurations
- # --nobl avoids overwriting build binlog with binlog from tests
- - script: |
- chmod +x ./test.sh
- ./test.sh --configuration $(_BuildConfig) --ci --test --integrationTest --nobl
+ # Because the build step is using -ci flag, restore is done in a local .packages directory.
+ # We need to pass NUGET_PACKAGES so that when dotnet test is doing evaluation phase on the projects, it can resolve .props/.targets from packages and import them.
+ # Otherwise, props/targets are not imported. It's important that they are imported so that IsTestingPlatformApplication ends up being set.
+ - script: $(Build.SourcesDirectory)/.dotnet/dotnet test --solution NonWindowsTests.slnf -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\TestStep.binlog
name: Test
- displayName: Tests
+ displayName: Test
+ env:
+ DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
+ NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages
# This step is only helpful for diagnosing some issues with vstest/test host that would not appear
# through the console or trx
@@ -212,13 +217,15 @@ stages:
displayName: Build
- ${{ if eq(parameters.SkipTests, False) }}:
- # --ci is allowing to import some environment variables and some required configurations
- # --nobl avoids overwriting build binlog with binlog from tests
- - script: |
- chmod +x ./test.sh
- ./test.sh --configuration $(_BuildConfig) --ci --test --integrationTest --nobl
+ # Because the build step is using -ci flag, restore is done in a local .packages directory.
+ # We need to pass NUGET_PACKAGES so that when dotnet test is doing evaluation phase on the projects, it can resolve .props/.targets from packages and import them.
+ # Otherwise, props/targets are not imported. It's important that they are imported so that IsTestingPlatformApplication ends up being set.
+ - script: $(Build.SourcesDirectory)/.dotnet/dotnet test --solution NonWindowsTests.slnf -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\TestStep.binlog
name: Test
- displayName: Tests
+ displayName: Test
+ env:
+ DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
+ NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages
# This step is only helpful for diagnosing some issues with vstest/test host that would not appear
# through the console or trx
diff --git a/dotnet.config b/dotnet.config
new file mode 100644
index 0000000000..1271fc9236
--- /dev/null
+++ b/dotnet.config
@@ -0,0 +1,2 @@
+[dotnet.test:runner]
+name= "Microsoft.Testing.Platform"
diff --git a/global.json b/global.json
index 21bb176a5e..3ff22098e5 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"tools": {
- "dotnet": "10.0.100-preview.3.25125.5",
+ "dotnet": "10.0.100-preview.3.25166.18",
"runtimes": {
"dotnet": [
"3.1.32",
@@ -23,7 +23,7 @@
}
},
"sdk": {
- "version": "10.0.100-preview.3.25125.5",
+ "version": "10.0.100-preview.3.25166.18",
"allowPrerelease": true,
"rollForward": "latestFeature"
},
diff --git a/samples/Playground/Playground.csproj b/samples/Playground/Playground.csproj
index a4123f3a05..b8570b8348 100644
--- a/samples/Playground/Playground.csproj
+++ b/samples/Playground/Playground.csproj
@@ -6,6 +6,8 @@
enable
false
$(NoWarn);NETSDK1023
+
+ true
diff --git a/samples/Playground/Tests.cs b/samples/Playground/Tests.cs
index 5baadf9ecc..c3b540e601 100644
--- a/samples/Playground/Tests.cs
+++ b/samples/Playground/Tests.cs
@@ -15,7 +15,8 @@ public class TestClass
[TestMethod]
[DynamicData(nameof(Data))]
public void Test3(int a, int b)
- => throw new Exception("aaaa");
+ {
+ }
public static IEnumerable<(int A, int B)> Data
{
diff --git a/test/Directory.Build.targets b/test/Directory.Build.targets
index d74f48bbda..4c84c3db2d 100644
--- a/test/Directory.Build.targets
+++ b/test/Directory.Build.targets
@@ -17,6 +17,17 @@
$(TestRunnerAdditionalArguments) --hangdump --hangdump-timeout 15m
$(TestRunnerAdditionalArguments) --coverage --coverage-settings $(RepoRoot)test/coverage.config --coverage-output $(ModuleName).coverage
+
+
+ <_TestArchitecture>$(PlatformTarget)
+ <_TestArchitecture Condition="'$(PlatformTarget)' == '' or '$(PlatformTarget)' == 'AnyCpu'">x64
+
+ <_ResultFileNameNoExt>$(MSBuildProjectName)_$(TargetFramework)_$(_TestArchitecture)
+ $(ArtifactsTestResultsDir)$(_ResultFileNameNoExt).trx
+ <_TestResultTrxFileName>$([System.IO.Path]::GetFileName('$(ResultsTrxPath)'))
+ <_TestResultDirectory>$([System.IO.Path]::GetDirectoryName('$(ResultsTrxPath)'))
+ $(TestingPlatformCommandLineArguments) --report-trx --report-trx-filename "$(_TestResultTrxFileName)" --results-directory "$(_TestResultDirectory)" $(TestRunnerAdditionalArguments)
+
@@ -32,6 +43,7 @@
+
diff --git a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/DotnetTestCliTests.cs b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/DotnetTestCliTests.cs
index 85a3cc1970..866bd1ed8f 100644
--- a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/DotnetTestCliTests.cs
+++ b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/DotnetTestCliTests.cs
@@ -25,7 +25,7 @@ public async Task DotnetTest_Should_Execute_Tests(string tfm, BuildConfiguration
.PatchCodeWithReplace("$OutputType$", string.Empty)
.PatchCodeWithReplace("$Extra$", string.Empty));
- DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -m:1 -nodeReuse:false {generator.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
+ DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -m:1 -nodeReuse:false {generator.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: generator.TargetAssetPath);
// There is whitespace difference in output in parent and public repo that depends on the version of the dotnet SDK used.
compilationResult.AssertOutputMatchesRegex(@"Passed!\s+-\s+Failed:\s+0,\s+Passed:\s+1,\s+Skipped:\s+0,\s+Total:\s+1");
diff --git a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/MSBuildRunnerTests.cs b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/MSBuildRunnerTests.cs
index 770b7eb021..e826266a0b 100644
--- a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/MSBuildRunnerTests.cs
+++ b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/MSBuildRunnerTests.cs
@@ -66,7 +66,8 @@ public async Task MSBuildTestTarget_SingleAndMultiTfm_Should_Run_Solution_Tests(
// Build the solution
DotnetMuxerResult restoreResult = await DotnetCli.RunAsync($"restore -m:1 -nodeReuse:false {solution.SolutionFile} --configfile {nugetFile}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
restoreResult.AssertOutputDoesNotContain("An approximate best match of");
- DotnetMuxerResult testResult = await DotnetCli.RunAsync($"{command} -m:1 -nodeReuse:false {solution.SolutionFile}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
+
+ DotnetMuxerResult testResult = await DotnetCli.RunAsync($"{command} -m:1 -nodeReuse:false {solution.SolutionFile}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: generator.TargetAssetPath);
if (isMultiTfm)
{
diff --git a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/PublishAotNonNativeTests.cs b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/PublishAotNonNativeTests.cs
index 2ff4068225..fdcc62e704 100644
--- a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/PublishAotNonNativeTests.cs
+++ b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/PublishAotNonNativeTests.cs
@@ -24,7 +24,7 @@ public async Task RunTests_ThatEnablePublishAOT_ButDontBuildToNative()
.PatchCodeWithReplace("$TargetFramework$", $"{TargetFrameworks.NetCurrent}")
.PatchCodeWithReplace("$MSTestVersion$", MSTestVersion));
- DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -c Debug {generator.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, failIfReturnValueIsNotZero: false);
+ DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -c Debug {generator.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: generator.TargetAssetPath, failIfReturnValueIsNotZero: false);
// In the real-world issue, access to path C:\Program Files\dotnet\ is denied, but we run this from a local .dotnet folder, where we have write access.
// So instead of relying on the test run failing because of AccessDenied, we check the output, and see where TestResults were placed.
@@ -68,6 +68,10 @@ we end up with a -dev or -ci version which will lose resolution over -preview de
+#file dotnet.config
+[dotnet.test:runner]
+name= "VSTest"
+
#file UnitTest1.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
diff --git a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/RunsettingsTests.cs b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/RunsettingsTests.cs
index b040a3170b..9944f0d74f 100644
--- a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/RunsettingsTests.cs
+++ b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/RunsettingsTests.cs
@@ -71,8 +71,12 @@ public async Task UnsupportedRunSettingsEntriesAreFlagged_Localization(string? t
switch (expectedLocale)
{
case "fr-FR":
- testHostResult.AssertOutputContains("Les loggers Runsettings ne sont pas pris en charge par Microsoft.Testing.Platform et seront ignorés");
- testHostResult.AssertOutputContains("Les datacollecteurs Runsettings ne sont pas pris en charge par Microsoft.Testing.Platform et seront ignorés");
+ // Using regex for the "é" of ignorés as something with encoding doesn't work properly.
+ // The é shows correctly when invoking with Arcade, but not with dotnet test.
+ // This is probably because Arcade infra uses Exec MSBuild task, which seems to be having extra logic around handling encoding.
+ // See https://github.com/dotnet/msbuild/blob/bcc2dc6a6509ffb63f1253a9bbbaaa233bd53a50/src/Tasks/Exec.cs
+ testHostResult.AssertOutputMatchesRegex(@"Les loggers Runsettings ne sont pas pris en charge par Microsoft\.Testing\.Platform et seront ignor.*?s");
+ testHostResult.AssertOutputMatchesRegex(@"Les datacollecteurs Runsettings ne sont pas pris en charge par Microsoft\.Testing\.Platform et seront ignor.*?s");
break;
case "it-IT":
testHostResult.AssertOutputContains("I logger Runsettings non sono supportati da Microsoft.Testing.Platform e verranno ignorati");
diff --git a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/SdkTests.cs b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/SdkTests.cs
index 21cf44541d..a7f0590819 100644
--- a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/SdkTests.cs
+++ b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/SdkTests.cs
@@ -33,6 +33,10 @@ we end up with a -dev or -ci version which will lose resolution over -preview de
+#file dotnet.config
+[dotnet.test:runner]
+name= "VSTest"
+
#file UnitTest1.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -60,7 +64,7 @@ public async Task RunTests_With_VSTest(string multiTfm, BuildConfiguration build
.PatchCodeWithReplace("$TargetFramework$", multiTfm)
.PatchCodeWithReplace("$ExtraProperties$", "true"));
- DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -c {buildConfiguration} {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
+ DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -c {buildConfiguration} {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: testAsset.TargetAssetPath);
Assert.AreEqual(0, compilationResult.ExitCode);
compilationResult.AssertOutputMatchesRegex(@"Passed! - Failed: 0, Passed: 1, Skipped: 0, Total: 1, Duration: .* [m]?s - MSTestSdk.dll \(net9\.0\)");
@@ -87,7 +91,7 @@ public async Task RunTests_With_MSTestRunner_DotnetTest(string multiTfm, BuildCo
.PatchCodeWithReplace("$TargetFramework$", multiTfm)
.PatchCodeWithReplace("$ExtraProperties$", string.Empty));
- DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -c {buildConfiguration} {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
+ DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test -c {buildConfiguration} {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: testAsset.TargetAssetPath);
Assert.AreEqual(0, compilationResult.ExitCode);
compilationResult.AssertOutputMatchesRegex(@"Tests succeeded: .* \[net9\.0|x64\]");
@@ -355,6 +359,7 @@ public async Task EnablePlaywrightProperty_WhenUsingVSTest_AllowsToRunPlaywright
DotnetMuxerResult dotnetTestResult = await DotnetCli.RunAsync(
$"test {exeOrDllName}",
AcceptanceFixture.NuGetGlobalPackagesFolder.Path,
+ workingDirectory: AssetFixture.PlaywrightProjectPath,
failIfReturnValueIsNotZero: false,
warnAsError: false,
suppressPreviewDotNetMessage: false);
@@ -398,6 +403,7 @@ public async Task EnableAspireProperty_WhenUsingVSTest_AllowsToRunAspireTests()
DotnetMuxerResult dotnetTestResult = await DotnetCli.RunAsync(
$"test {exeOrDllName}",
AcceptanceFixture.NuGetGlobalPackagesFolder.Path,
+ workingDirectory: AssetFixture.AspireProjectPath,
warnAsError: false,
suppressPreviewDotNetMessage: false);
Assert.AreEqual(0, dotnetTestResult.ExitCode);
@@ -416,7 +422,7 @@ public async Task SettingIsTestApplicationToFalseReducesAddedExtensionsAndMakesP
.PatchCodeWithReplace("$TargetFramework$", TargetFrameworks.NetCurrent)
.PatchCodeWithReplace("$ExtraProperties$", "false"));
- DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
+ DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"test {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: testAsset.TargetAssetPath);
Assert.AreEqual(0, compilationResult.ExitCode);
@@ -461,6 +467,10 @@ public sealed class TestAssetFixture() : TestAssetFixtureBase(AcceptanceFixture.
+#file dotnet.config
+[dotnet.test:runner]
+name= "VSTest"
+
#file UnitTest1.cs
namespace AspireProject;
@@ -523,6 +533,10 @@ public async Task HomepageHasPlaywrightInTitleAndGetStartedLinkLinkingToTheIntro
await Expect(Page).ToHaveURLAsync(new Regex(".*intro"));
}
}
+
+#file dotnet.config
+[dotnet.test:runner]
+name= "VSTest"
""";
public string AspireProjectPath => GetAssetPath(AspireProjectName);
diff --git a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/TimeoutTests.cs b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/TimeoutTests.cs
index 653c51637c..9c486257be 100644
--- a/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/TimeoutTests.cs
+++ b/test/IntegrationTests/MSTest.Acceptance.IntegrationTests/TimeoutTests.cs
@@ -8,6 +8,7 @@
namespace MSTest.Acceptance.IntegrationTests;
[TestClass]
+[Ignore("These tests are so flaky, which could be related (at least partially) to https://github.com/microsoft/testfx/issues/5165")]
public class TimeoutTests : AcceptanceTestBase
{
private static readonly Dictionary InfoByKind = new()
diff --git a/test/IntegrationTests/MSTest.IntegrationTests/OutputTests.cs b/test/IntegrationTests/MSTest.IntegrationTests/OutputTests.cs
index 4a295c78c4..c7720d0655 100644
--- a/test/IntegrationTests/MSTest.IntegrationTests/OutputTests.cs
+++ b/test/IntegrationTests/MSTest.IntegrationTests/OutputTests.cs
@@ -14,11 +14,11 @@ public class OutputTests : CLITestBase
{
private const string TestAssetName = "OutputTestProject";
-#if DEBUG
- public async Task OutputIsNotMixedWhenTestsRunInParallel() => await ValidateOutputForClassAsync("UnitTest1");
-#endif
+#pragma warning disable IDE0051 // Remove unused private members - test is failing in CI.
+ private async Task OutputIsNotMixedWhenTestsRunInParallel() => await ValidateOutputForClassAsync("UnitTest1");
- public async Task OutputIsNotMixedWhenAsyncTestsRunInParallel() => await ValidateOutputForClassAsync("UnitTest2");
+ private async Task OutputIsNotMixedWhenAsyncTestsRunInParallel() => await ValidateOutputForClassAsync("UnitTest2");
+#pragma warning restore IDE0051 // Remove unused private members
private static async Task ValidateOutputForClassAsync(string className)
{
diff --git a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/Helpers/AcceptanceTestBase.cs b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/Helpers/AcceptanceTestBase.cs
index 49429f20a8..b4703414ab 100644
--- a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/Helpers/AcceptanceTestBase.cs
+++ b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/Helpers/AcceptanceTestBase.cs
@@ -42,6 +42,10 @@ public void TestMethod1()
{
}
}
+
+#file dotnet.config
+[dotnet.test:runner]
+name= "VSTest"
""";
static AcceptanceTestBase()
diff --git a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Solution.cs b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Solution.cs
index c9c13b4a22..87a3c84887 100644
--- a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Solution.cs
+++ b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Solution.cs
@@ -42,6 +42,10 @@ public async Task MSBuildTests_UseMSBuildTestInfrastructure_Should_Run_Solution_
string solutionFolder = Path.Combine(tempDirectory.Path, "Solution");
VSSolution solution = new(solutionFolder, "MSTestSolution");
string nugetFile = solution.AddOrUpdateFileContent("Nuget.config", nugetConfigContent);
+ solution.AddOrUpdateFileContent("dotnet.config", """
+ [dotnet.test:runner]
+ name= "VSTest"
+ """);
for (int i = 0; i < 3; i++)
{
CSharpProject project = solution.CreateCSharpProject($"TestProject{i}", isMultiTfm ? singleTfmOrMultiTfm.Split(';') : [singleTfmOrMultiTfm]);
@@ -55,7 +59,7 @@ public async Task MSBuildTests_UseMSBuildTestInfrastructure_Should_Run_Solution_
// Build the solution
DotnetMuxerResult restoreResult = await DotnetCli.RunAsync($"restore -nodeReuse:false {solution.SolutionFile} --configfile {nugetFile}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
restoreResult.AssertOutputDoesNotContain("An approximate best match of");
- DotnetMuxerResult testResult = await DotnetCli.RunAsync($"{command} -nodeReuse:false {solution.SolutionFile}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
+ DotnetMuxerResult testResult = await DotnetCli.RunAsync($"{command} -nodeReuse:false {solution.SolutionFile}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: solution.FolderPath);
if (isMultiTfm)
{
diff --git a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Test.cs b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Test.cs
index 0ea32cb872..93e18914e9 100644
--- a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Test.cs
+++ b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/MSBuildTests.Test.cs
@@ -54,7 +54,7 @@ private async Task InvokeTestingPlatform_Target_Should_Execute_Tests_Without_Sho
.PatchCodeWithReplace("$AssertValue$", testSucceeded.ToString().ToLowerInvariant())
.PatchCodeWithReplace("$MicrosoftTestingPlatformVersion$", MicrosoftTestingPlatformVersion));
string testResultFolder = Path.Combine(testAsset.TargetAssetPath, Guid.NewGuid().ToString("N"));
- DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"{testCommand} -p:TestingPlatformCommandLineArguments=\"--results-directory %22{testResultFolder}%22\" -p:Configuration={compilationMode} -p:nodeReuse=false \"{testAsset.TargetAssetPath}\"", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, failIfReturnValueIsNotZero: false);
+ DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"{testCommand} -p:TestingPlatformCommandLineArguments=\"--results-directory %22{testResultFolder}%22\" -p:Configuration={compilationMode} -p:nodeReuse=false \"{testAsset.TargetAssetPath}\"", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: testAsset.TargetAssetPath, failIfReturnValueIsNotZero: false);
foreach (string tfmToAssert in tfmsToAssert)
{
@@ -86,10 +86,12 @@ private async Task InvokeTestingPlatform_Target_Should_Build_Without_Warnings_An
DotnetMuxerResult compilationResult = testCommand.StartsWith("test", StringComparison.OrdinalIgnoreCase)
? await DotnetCli.RunAsync(
$"{testCommand} -p:Configuration={compilationMode} -p:nodeReuse=false \"{testAsset.TargetAssetPath}\" -- --treenode-filter --results-directory \"{testResultFolder}\"",
- AcceptanceFixture.NuGetGlobalPackagesFolder.Path)
+ AcceptanceFixture.NuGetGlobalPackagesFolder.Path,
+ workingDirectory: testAsset.TargetAssetPath)
: await DotnetCli.RunAsync(
$"{testCommand} -p:TestingPlatformCommandLineArguments=\"--treenode-filter --results-directory \"{testResultFolder}\"\" -p:Configuration={compilationMode} -p:nodeReuse=false \"{testAsset.TargetAssetPath}\"",
- AcceptanceFixture.NuGetGlobalPackagesFolder.Path);
+ AcceptanceFixture.NuGetGlobalPackagesFolder.Path,
+ workingDirectory: testAsset.TargetAssetPath);
foreach (string tfmToAssert in tfmsToAssert)
{
@@ -145,6 +147,7 @@ public async Task Invoke_DotnetTest_With_Arch_Switch_x86_Should_Work()
await DotnetCli.RunAsync(
$"test --arch x86 -p:TestingPlatformDotnetTestSupport=True -p:Configuration=Release -p:nodeReuse=false \"{testAsset.TargetAssetPath}\"",
AcceptanceFixture.NuGetGlobalPackagesFolder.Path,
+ workingDirectory: testAsset.TargetAssetPath,
environmentVariables: dotnetRootX86,
failIfReturnValueIsNotZero: false);
@@ -160,6 +163,7 @@ await DotnetCli.RunAsync(
[TestMethod]
public async Task Invoke_DotnetTest_With_Incompatible_Arch()
{
+ // TODO: Test with both old and new dotnet test experience.
Architecture currentArchitecture = RuntimeInformation.ProcessArchitecture;
string incompatibleArchitecture = currentArchitecture switch
{
@@ -177,6 +181,7 @@ public async Task Invoke_DotnetTest_With_Incompatible_Arch()
DotnetMuxerResult result = await DotnetCli.RunAsync(
$"test --arch {incompatibleArchitecture} -p:TestingPlatformDotnetTestSupport=True \"{testAsset.TargetAssetPath}\"",
AcceptanceFixture.NuGetGlobalPackagesFolder.Path,
+ workingDirectory: testAsset.TargetAssetPath,
failIfReturnValueIsNotZero: false);
// On Windows, we run the exe directly.
@@ -231,6 +236,7 @@ public async Task Invoke_DotnetTest_With_DOTNET_HOST_PATH_Should_Work()
await DotnetCli.RunAsync(
$"test -p:TestingPlatformDotnetTestSupport=True -p:Configuration=Release -p:nodeReuse=false \"{testAsset.TargetAssetPath}\"",
AcceptanceFixture.NuGetGlobalPackagesFolder.Path,
+ workingDirectory: testAsset.TargetAssetPath,
environmentVariables: dotnetHostPathEnvVar,
failIfReturnValueIsNotZero: false);
@@ -278,7 +284,7 @@ public async Task InvokeTestingPlatform_Target_Showing_Error_And_Do_Not_Capture_
.PatchCodeWithReplace("$TargetFrameworks$", $"{tfm}")
.PatchCodeWithReplace("$AssertValue$", testSucceeded.ToString().ToLowerInvariant())
.PatchCodeWithReplace("$MicrosoftTestingPlatformVersion$", MicrosoftTestingPlatformVersion));
- DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"{testCommand} -p:TestingPlatformShowTestsFailure=True -p:TestingPlatformCaptureOutput=False -p:Configuration={compilationMode} -p:nodeReuse=false {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, failIfReturnValueIsNotZero: false);
+ DotnetMuxerResult compilationResult = await DotnetCli.RunAsync($"{testCommand} -p:TestingPlatformShowTestsFailure=True -p:TestingPlatformCaptureOutput=False -p:Configuration={compilationMode} -p:nodeReuse=false {testAsset.TargetAssetPath}", AcceptanceFixture.NuGetGlobalPackagesFolder.Path, workingDirectory: testAsset.TargetAssetPath, failIfReturnValueIsNotZero: false);
compilationResult.AssertOutputContains("error test failed: Test2 (");
compilationResult.AssertOutputContains("FAILED: Expected 'true', but got 'false'.");
@@ -329,6 +335,10 @@ public async Task TestingPlatformDisableCustomTestTarget_Should_Cause_UserDefine
+#file dotnet.config
+[dotnet.test:runner]
+name= "VSTest"
+
#file Program.cs
using Microsoft.Testing.Platform.Builder;
using Microsoft.Testing.Platform.Capabilities.TestFramework;
diff --git a/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/MSTestAdapter.PlatformServices.UnitTests.csproj b/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/MSTestAdapter.PlatformServices.UnitTests.csproj
index c3998ee42c..46cd16bf11 100644
--- a/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/MSTestAdapter.PlatformServices.UnitTests.csproj
+++ b/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/MSTestAdapter.PlatformServices.UnitTests.csproj
@@ -2,7 +2,8 @@
net48
- net462;$(NetStandardNetFrameworkHolder);netcoreapp3.1;net6.0;$(WinUiMinimum)
+ net462;$(NetStandardNetFrameworkHolder);netcoreapp3.1;net6.0
+ $(TargetFrameworks);$(WinUiMinimum)
true
true
true
diff --git a/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/ThreadOperationsTests.cs b/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/ThreadOperationsTests.cs
index 9b1b32dcef..89456b1846 100644
--- a/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/ThreadOperationsTests.cs
+++ b/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/ThreadOperationsTests.cs
@@ -14,8 +14,9 @@ public class ThreadOperationsTests : TestContainer
public ThreadOperationsTests() => _asyncOperations = new ThreadOperations();
+#pragma warning disable IDE0051 // Remove unused private members - test is failing in CI.
#if NETFRAMEWORK
- public void ExecuteShouldStartTheActionOnANewThread()
+ private void ExecuteShouldStartTheActionOnANewThread()
{
int actionThreadID = 0;
void Action() => actionThreadID = Environment.CurrentManagedThreadId;
@@ -26,11 +27,12 @@ public void ExecuteShouldStartTheActionOnANewThread()
}
#endif
- public void ExecuteShouldReturnFalseIfTheActionTimesOut()
+ private void ExecuteShouldReturnFalseIfTheActionTimesOut()
{
static void Action() => Task.Delay(1000).Wait();
CancellationTokenSource tokenSource = new();
Verify(!_asyncOperations.Execute(Action, 1, tokenSource.Token));
}
+#pragma warning restore IDE0051 // Remove unused private members
}
diff --git a/test/UnitTests/MSTestAdapter.UnitTests/MSTestAdapter.UnitTests.csproj b/test/UnitTests/MSTestAdapter.UnitTests/MSTestAdapter.UnitTests.csproj
index 5814b209bb..2f3eddd243 100644
--- a/test/UnitTests/MSTestAdapter.UnitTests/MSTestAdapter.UnitTests.csproj
+++ b/test/UnitTests/MSTestAdapter.UnitTests/MSTestAdapter.UnitTests.csproj
@@ -2,7 +2,8 @@
net48
- net6.0;net462;$(NetStandardNetFrameworkHolder);netcoreapp3.1;$(WinUiMinimum)
+ net6.0;net462;$(NetStandardNetFrameworkHolder);netcoreapp3.1
+ $(TargetFrameworks);$(WinUiMinimum)
true
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.UnitTests
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.UnitTests
diff --git a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/Microsoft.Testing.Extensions.UnitTests.csproj b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/Microsoft.Testing.Extensions.UnitTests.csproj
index bc3c0aa3a0..9674f0054d 100644
--- a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/Microsoft.Testing.Extensions.UnitTests.csproj
+++ b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/Microsoft.Testing.Extensions.UnitTests.csproj
@@ -1,7 +1,8 @@
- $(MicrosoftTestingTargetFrameworks);net462
+ $(MicrosoftTestingTargetFrameworks)
+ $(TargetFrameworks);net462
true
Exe
diff --git a/test/UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj b/test/UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj
index 9d7555a47e..071eb6149a 100644
--- a/test/UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj
+++ b/test/UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj
@@ -1,7 +1,8 @@
- $(MicrosoftTestingTargetFrameworks);net462
+ $(MicrosoftTestingTargetFrameworks)
+ $(TargetFrameworks);net462
true
Exe
diff --git a/test/UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests.csproj b/test/UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests.csproj
index dcff0824b4..59e0642311 100644
--- a/test/UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests.csproj
+++ b/test/UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests.csproj
@@ -4,6 +4,10 @@
net8.0;net9.0
true
Exe
+
+
+ true
+
diff --git a/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Microsoft.Testing.Platform.UnitTests.csproj b/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Microsoft.Testing.Platform.UnitTests.csproj
index 0c5efe56e0..5668eecba6 100644
--- a/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Microsoft.Testing.Platform.UnitTests.csproj
+++ b/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Microsoft.Testing.Platform.UnitTests.csproj
@@ -1,7 +1,8 @@
- $(MicrosoftTestingTargetFrameworks);net462
+ $(MicrosoftTestingTargetFrameworks)
+ $(TargetFrameworks);net462
true
Exe
diff --git a/test/UnitTests/TestFramework.UnitTests/TestFramework.UnitTests.csproj b/test/UnitTests/TestFramework.UnitTests/TestFramework.UnitTests.csproj
index 1ba5682a20..2274f24540 100644
--- a/test/UnitTests/TestFramework.UnitTests/TestFramework.UnitTests.csproj
+++ b/test/UnitTests/TestFramework.UnitTests/TestFramework.UnitTests.csproj
@@ -2,7 +2,8 @@
net48
- net6.0;net462;$(NetStandardNetFrameworkHolder);netcoreapp3.1;$(WinUiMinimum)
+ net6.0;net462;$(NetStandardNetFrameworkHolder);netcoreapp3.1
+ $(TargetFrameworks);$(WinUiMinimum)
true
Microsoft.VisualStudio.TestPlatform.TestFramework.UnitTests
Microsoft.VisualStudio.TestPlatform.TestFramework.UnitTests