Я получаю исключение System.ArgumentException при запуске тестов MSTest для консольного приложения, содержащего метод Ma ⇐ C#
Я получаю исключение System.ArgumentException при запуске тестов MSTest для консольного приложения, содержащего метод Ma
У меня есть базовое консольное приложение, разработанное на C# 10 и предназначенное для .NET 6.0. Приложение получает полный путь к файлу в качестве входных данных, проверяет его существование и записывает на консоль сообщение, указывающее, существует он или нет. Кроме того, у меня есть проект модульного тестирования, реализованный с помощью MSTest, содержащий три теста, охватывающие все возможные сценарии и операторы кода. Однако когда я выполняю тесты в Visual Studio 2022 или через командную строку, я сталкиваюсь со следующей ошибкой для каждого теста: «System.ArgumentException: Argument --parentprocessid не указан».
Вот код основной программы.
класс Программа { статическая пустота Main() { пока (правда) { Console.WriteLine("Введите путь к файлу (или «выйдите», чтобы выйти):"); нить? filePath = Console.ReadLine(); if (filePath?.ToLower() == "выход") перерыв; bool fileExists = File.Exists(filePath); если (файлСуществует) { Console.WriteLine("Файл существует."); } еще { Console.WriteLine("Файл не существует."); } } Console.WriteLine("Нажмите любую клавишу, чтобы выйти..."); Консоль.ReadKey(); } } Вот код модульных тестов.
с использованием Microsoft.VisualStudio.TestPlatform.TestHost; пространство имен FileCheckTests { [ТестКласс] публичный частичный класс UnitTests { [Метод испытания] общественная пустота FileExists_ShouldPrintFileExists() { строка filePath = Path.GetTempFileName(); вар consoleOutput = новый ConsoleOutput(); используя (consoleOutput) { Console.SetIn(новый StringReader(filePath)); Program.Main(ноль); } строковый вывод = consoleOutput.GetOutput(); Assert.IsTrue(output.Contains("Файл существует")); } [Метод испытания] общественная пустота FileDoesNotExist_ShouldPrintFileDoesNotExist() { строка filePath = «NonExistentFile.txt»; вар consoleOutput = новый ConsoleOutput(); используя (consoleOutput) { Console.SetIn(новый StringReader(filePath)); Program.Main(ноль); } строковый вывод = consoleOutput.GetOutput(); Assert.IsTrue(output.Contains("Файл не существует"); } [Метод испытания] общественная недействительность ExitCommand_ShouldExitProgram() { строка filePath = «выход»; вар consoleOutput = новый ConsoleOutput(); используя (consoleOutput) { Console.SetIn(новый StringReader(filePath)); Program.Main(ноль); } строковый вывод = consoleOutput.GetOutput(); Assert.IsFalse(output.Contains("Файл существует") || output.Contains("Файл не существует"); } } } Наконец, вот класс, который модульные тесты используют для обработки вывода консоли.
пространство имен FileCheckTests { публичный частичный класс UnitTests { частный класс ConsoleOutput: IDisposable { частный StringWriter stringWriter; частный TextWriter originalOutput; публичный ConsoleOutput() { stringWriter = новый StringWriter(); исходныйВыход = Console.Out; Console.SetOut(stringWriter); } общедоступная строка GetOutput() { вернуть stringWriter.ToString(); } публичная недействительность Dispose() { Console.SetOut(оригинальныйВыход); stringWriter.Dispose(); } } } } На данный момент я сделал следующее, чтобы попытаться разрешить исключение:\
[*]Обновлена платформа MSTest и тестовый адаптер. [*]Перестроил решение. [*]Решение удалено. [*]Перезапустил Visual Studio. [*]Добавлены аргументы string[] по умолчанию обратно в сигнатуру метода Main и передан пустой массив строк в вызов Program.Main() для каждого теста.
У меня есть базовое консольное приложение, разработанное на C# 10 и предназначенное для .NET 6.0. Приложение получает полный путь к файлу в качестве входных данных, проверяет его существование и записывает на консоль сообщение, указывающее, существует он или нет. Кроме того, у меня есть проект модульного тестирования, реализованный с помощью MSTest, содержащий три теста, охватывающие все возможные сценарии и операторы кода. Однако когда я выполняю тесты в Visual Studio 2022 или через командную строку, я сталкиваюсь со следующей ошибкой для каждого теста: «System.ArgumentException: Argument --parentprocessid не указан».
Вот код основной программы.
класс Программа { статическая пустота Main() { пока (правда) { Console.WriteLine("Введите путь к файлу (или «выйдите», чтобы выйти):"); нить? filePath = Console.ReadLine(); if (filePath?.ToLower() == "выход") перерыв; bool fileExists = File.Exists(filePath); если (файлСуществует) { Console.WriteLine("Файл существует."); } еще { Console.WriteLine("Файл не существует."); } } Console.WriteLine("Нажмите любую клавишу, чтобы выйти..."); Консоль.ReadKey(); } } Вот код модульных тестов.
с использованием Microsoft.VisualStudio.TestPlatform.TestHost; пространство имен FileCheckTests { [ТестКласс] публичный частичный класс UnitTests { [Метод испытания] общественная пустота FileExists_ShouldPrintFileExists() { строка filePath = Path.GetTempFileName(); вар consoleOutput = новый ConsoleOutput(); используя (consoleOutput) { Console.SetIn(новый StringReader(filePath)); Program.Main(ноль); } строковый вывод = consoleOutput.GetOutput(); Assert.IsTrue(output.Contains("Файл существует")); } [Метод испытания] общественная пустота FileDoesNotExist_ShouldPrintFileDoesNotExist() { строка filePath = «NonExistentFile.txt»; вар consoleOutput = новый ConsoleOutput(); используя (consoleOutput) { Console.SetIn(новый StringReader(filePath)); Program.Main(ноль); } строковый вывод = consoleOutput.GetOutput(); Assert.IsTrue(output.Contains("Файл не существует"); } [Метод испытания] общественная недействительность ExitCommand_ShouldExitProgram() { строка filePath = «выход»; вар consoleOutput = новый ConsoleOutput(); используя (consoleOutput) { Console.SetIn(новый StringReader(filePath)); Program.Main(ноль); } строковый вывод = consoleOutput.GetOutput(); Assert.IsFalse(output.Contains("Файл существует") || output.Contains("Файл не существует"); } } } Наконец, вот класс, который модульные тесты используют для обработки вывода консоли.
пространство имен FileCheckTests { публичный частичный класс UnitTests { частный класс ConsoleOutput: IDisposable { частный StringWriter stringWriter; частный TextWriter originalOutput; публичный ConsoleOutput() { stringWriter = новый StringWriter(); исходныйВыход = Console.Out; Console.SetOut(stringWriter); } общедоступная строка GetOutput() { вернуть stringWriter.ToString(); } публичная недействительность Dispose() { Console.SetOut(оригинальныйВыход); stringWriter.Dispose(); } } } } На данный момент я сделал следующее, чтобы попытаться разрешить исключение:\
[*]Обновлена платформа MSTest и тестовый адаптер. [*]Перестроил решение. [*]Решение удалено. [*]Перезапустил Visual Studio. [*]Добавлены аргументы string[] по умолчанию обратно в сигнатуру метода Main и передан пустой массив строк в вызов Program.Main() для каждого теста.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение