假设我有一个像
这样的简单程序using System;
public class Solution
{
public static void Main(string[] args)
{
int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
Array.Sort(arr);
Console.WriteLine(string.Join(" ", arr));
}
}
我想在一个单独的项目中测试,比如
[TestMethod]
public void TwoNumbersDescendingAreSwapped()
{
string input = "2 1";
string expectedOutput = "1 2";
// ... ???
Assert.AreEqual(expectedOutput, actualOutput);
}
是否可以在不使用解决方案中的.exe的情况下执行此操作?
答案 0 :(得分:9)
将执行Main()
所有工作的代码移动到它自己的类和方法中:
public static class InputConverter
{
public static string ConvertInput(string input)
{
int[] arr = Array.ConvertAll(input.Split(' '), int.Parse);
Array.Sort(arr);
return string.Join(" ", arr);
}
}
您的Main()
随后变为:
public static void Main(string[] args)
{
var input = Console.ReadLine();
var output = InputConverter.ConvertInput(input);
Console.WriteLine(output);
}
您现在可以在不依赖ConvertInput()
的写入和读取功能的情况下测试Console
:
[TestMethod]
public void TwoNumbersDescendingAreSwapped()
{
// Arrange
var input = "2 1";
var expectedOutput = "1 2";
// Act
var actualOutput = InputConverter.ConvertInput(input);
// Assert
Assert.AreEqual(expectedOutput, actualOutput);
}
顺便说一下:你传递参数的方式似乎就像保证输入总是符合你的期望。当用户传入与整数的字符串表示完全不同的内容时会发生什么?您需要在InputConverter.ConvertInput()
中验证输入并根据该输入创建适当的操作过程(抛出Exception
,返回null
,取决于您之后的内容)。然后,您必须对这些方案进行单元测试,以确保ConvertInput()
按预期执行所有情况。