diff --git a/src/NUnitTestAdapter/AdapterSettings.cs b/src/NUnitTestAdapter/AdapterSettings.cs index 188d674d..e53cf258 100644 --- a/src/NUnitTestAdapter/AdapterSettings.cs +++ b/src/NUnitTestAdapter/AdapterSettings.cs @@ -119,6 +119,7 @@ public AdapterSettings(ITestLogger logger) public string WorkDirectory { get; private set; } public string Where { get; private set; } public string TestOutputXml { get; private set; } + public string TestOutputXmlFileName { get; private set; } public bool UseTestOutputXml => !string.IsNullOrEmpty(TestOutputXml) || OutputXmlFolderMode == OutputXmlFolderMode.UseResultDirectory; public OutputXmlFolderMode OutputXmlFolderMode { get; private set; } = OutputXmlFolderMode.RelativeToWorkFolder; @@ -329,6 +330,7 @@ public void Load(string settingsXml) private void ParseOutputXml(XmlNode nunitNode) { TestOutputXml = GetInnerTextWithLog(nunitNode, nameof(TestOutputXml)); + TestOutputXmlFileName = GetInnerTextWithLog(nunitNode, nameof(TestOutputXmlFileName)); if (Path.IsPathRooted(TestOutputXml)) { OutputXmlFolderMode = OutputXmlFolderMode.AsSpecified; diff --git a/src/NUnitTestAdapter/IAdapterSettings.cs b/src/NUnitTestAdapter/IAdapterSettings.cs index 8d8b116e..da7b04e7 100644 --- a/src/NUnitTestAdapter/IAdapterSettings.cs +++ b/src/NUnitTestAdapter/IAdapterSettings.cs @@ -47,6 +47,7 @@ public interface IAdapterSettings VsTestCategoryType VsTestCategoryType { get; } string TestOutputXml { get; } + string TestOutputXmlFileName { get; } bool UseTestOutputXml { get; } OutputXmlFolderMode OutputXmlFolderMode { get; } diff --git a/src/NUnitTestAdapter/NUnitEngine/NUnitEngineAdapter.cs b/src/NUnitTestAdapter/NUnitEngine/NUnitEngineAdapter.cs index 553876e3..526e95e1 100644 --- a/src/NUnitTestAdapter/NUnitEngine/NUnitEngineAdapter.cs +++ b/src/NUnitTestAdapter/NUnitEngine/NUnitEngineAdapter.cs @@ -163,7 +163,7 @@ public void GenerateTestOutput(NUnitResults testResults, string assemblyPath, st if (!settings.UseTestOutputXml) return; - string path = GetXmlFilePath(testOutputXmlFolder, Path.GetFileNameWithoutExtension(assemblyPath), "xml"); + string path = GetXmlFilePath(testOutputXmlFolder, GetTestOutputFileName(assemblyPath), "xml"); var resultService = GetService(); // Following null argument should work for nunit3 format. Empty array is OK as well. @@ -173,6 +173,15 @@ public void GenerateTestOutput(NUnitResults testResults, string assemblyPath, st logger.Info($" Test results written to {path}"); } + public string GetTestOutputFileName(string assemblyPath) + { + if (string.IsNullOrWhiteSpace(settings.TestOutputXmlFileName)) + { + return Path.GetFileNameWithoutExtension(assemblyPath); + } + return settings.TestOutputXmlFileName; + } + public string GetXmlFilePath(string folder, string defaultFileName, string extension) { if (!settings.NewOutputXmlFileForEachRun) diff --git a/src/NUnitTestAdapterTests/NUnitEngineTests/NUnitEngineAdapterTests.cs b/src/NUnitTestAdapterTests/NUnitEngineTests/NUnitEngineAdapterTests.cs index ef8413a9..0b28c6bd 100644 --- a/src/NUnitTestAdapterTests/NUnitEngineTests/NUnitEngineAdapterTests.cs +++ b/src/NUnitTestAdapterTests/NUnitEngineTests/NUnitEngineAdapterTests.cs @@ -19,6 +19,19 @@ public void TestXmlFileNameGeneration() Assert.That(path, Is.EqualTo("c:/assembly.xml")); } + [TestCase("", "myAssemblyFilename")] + [TestCase("whateverFileName", "whateverFileName")] + public void When_setting_up_defined_result_GetTestOutputFileName_returns_defined_filename(string testOutputXmlFileNameWithoutExtensionXmlNode, string expectedFileName) + { + var logger = Substitute.For(); + var settings = new AdapterSettings(logger); + settings.Load($@"c:\whatever/my/work/dir{testOutputXmlFileNameWithoutExtensionXmlNode}"); + var sut = new NUnitEngineAdapter(); + sut.InitializeSettingsAndLogging(settings, logger); + string filename = sut.GetTestOutputFileName("c:/myAssemblyFilename.dll"); + Assert.That(filename, Is.EqualTo(expectedFileName)); + } + [Test] public void TestXmlFileNameGenerationNewOutputXmlFileForEachRun() {