单元测试项目如何测试main()

How does unit test project test main()

我在VS2019中有一个简单的.net core控制台项目如下。

public class Program
{ 
   public static int Sum(int x, int y) 
   { 
      return x + y; 
   } 
   public static void Main(string[] args) 
   { 
      Func<int, int, int> sum = Sum; 
      Console.WriteLine(sum(10, 10)); 
   } 
}

我的问题是如何创建单元测试项目来测试 main()。

static void方法是你只能验证它是否与输入参数或静态成员交互。更好的方法是将所有逻辑委托给单独的组件并对其进行测试。那么无论是哪种类型的项目都无所谓。您可以只创建一个单元测试项目并测试您的代码。

public static void Main(string[] args)
{
   var component = new Component();
   component.Execute(args);
}

示例组件:

public class Component
{
    public static int Sum(int x, int y)
        => x + y;

    public void Execute(string[] args)
    {
        Func<int, int, int> sum = Sum;
        Console.Write(sum(10, 10));
    }
}

测试:

   [Fact]
   public void Test()
   {
       //assert
       var stringWriter = new StringWriter();
       Console.SetOut(stringWriter);

       var component = new Component();
       component.Execute(It.IsAny<string[]>());
       var output = stringWriter.ToString();
       Assert.Equal("20", output);
   }