【问题标题】:How does unit test project test main()单元测试项目如何测试main()
【发布时间】:2022-02-02 17:49:53
【问题描述】:

我在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()。

【问题讨论】:

  • 这看起来不像 ASP.NET Core 项目。对我来说,它看起来像一个控制台应用程序。它对 ASP.NET Core 没有任何作用...
  • 没错,就是.net core控制台项目
  • 你没有。这是一个集成测试。
  • 我认为在.net core中创建单元测试项目和在.net中创建单元测试项目是一样的。
  • 如何进行集成测试?

标签: c# visual-studio unit-testing .net-core


【解决方案1】:

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);
   }

【讨论】:

  • 把你的逻辑放到 Component 类中。然后在您的测试方法中断言控制台输出并调用 Execute 方法。