我有一个用 C# 10 开发的基本控制台应用程序,它是为 .NET 6.0 设计的。该应用程序接收完整的文件路径作为输入,验证其存在,并向控制台记录一条消息,指示其是否存在。此外,我还有一个使用 MSTest 实现的单元测试项目,其中包含三个测试,涵盖了所有可能的场景和代码语句。但是,当我在 Visual Studio 2022 中或通过命令提示符执行测试时,每个测试都会遇到以下错误:“System.ArgumentException:未指定参数 --parentprocessid。”
这是主程序的代码。
class Program
{
static void Main()
{
while (true)
{
Console.WriteLine("Enter a file path (or 'exit' to quit):");
string? filePath = Console.ReadLine();
if (filePath?.ToLower() == "exit")
break;
bool fileExists = File.Exists(filePath);
if (fileExists)
{
Console.WriteLine("File exists.");
}
else
{
Console.WriteLine("File doesn't exist.");
}
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
这是单元测试的代码。
using Microsoft.VisualStudio.TestPlatform.TestHost;
namespace FileCheckTests
{
[TestClass]
public partial class UnitTests
{
[TestMethod]
public void FileExists_ShouldPrintFileExists()
{
string filePath = Path.GetTempFileName();
var consoleOutput = new ConsoleOutput();
using (consoleOutput)
{
Console.SetIn(new StringReader(filePath));
Program.Main(null);
}
string output = consoleOutput.GetOutput();
Assert.IsTrue(output.Contains("File exists"));
}
[TestMethod]
public void FileDoesNotExist_ShouldPrintFileDoesNotExist()
{
string filePath = "NonExistentFile.txt";
var consoleOutput = new ConsoleOutput();
using (consoleOutput)
{
Console.SetIn(new StringReader(filePath));
Program.Main(null);
}
string output = consoleOutput.GetOutput();
Assert.IsTrue(output.Contains("File doesn't exist"));
}
[TestMethod]
public void ExitCommand_ShouldExitProgram()
{
string filePath = "exit";
var consoleOutput = new ConsoleOutput();
using (consoleOutput)
{
Console.SetIn(new StringReader(filePath));
Program.Main(null);
}
string output = consoleOutput.GetOutput();
Assert.IsFalse(output.Contains("File exists") || output.Contains("File doesn't exist"));
}
}
}
最后,这是单元测试用来处理控制台输出的类。
namespace FileCheckTests
{
public partial class UnitTests
{
private class ConsoleOutput : IDisposable
{
private StringWriter stringWriter;
private TextWriter originalOutput;
public ConsoleOutput()
{
stringWriter = new StringWriter();
originalOutput = Console.Out;
Console.SetOut(stringWriter);
}
public string GetOutput()
{
return stringWriter.ToString();
}
public void Dispose()
{
Console.SetOut(originalOutput);
stringWriter.Dispose();
}
}
}
}
到目前为止,我已执行以下操作来尝试解决该异常:\
问题是:您没有在测试项目中引用目标项目。
因此,
Program
将使用“Microsoft.VisualStudio.TestPlatform.TestHost”作为默认类定义。
将鼠标悬停到“程序”并查看它是什么。参考目标项目,问题应该消失。