单元测试CommandLineUtils中的命令

UnitTest the command of CommandLineUtils

Posted by 王帅 on April 6, 2020

引言

使用CommandLineUtils可以创建便捷的dotnet tool工具,官方的docs / samples /中包含有很多示例;但是对于如何运行Command却没有明示,如果你要单元测试自己创建的命令,要到test目录下参考官方的单元测试代码,以下列出自己实践的方法.

解决办法

  • 对于不使用依赖注入的Command,直接使用CommandLineApplication.Execute<Show>("-a");即可,其中Show[Command("show", Description = "")]
  • 对于使用依赖注入的Command可以参考这个示例
var commandLineApplication = new CommandLineApplication<Show>();
var services = new ServiceCollection()
    .AddLogging()
    .AddSingleton(Program.Configuration)
    .AddSingleton(Program.Configuration.Get<APPConfig>())//添加依赖注入
    .BuildServiceProvider();

commandLineApplication.Conventions
    .UseDefaultConventions()
    .UseConstructorInjection(services);

commandLineApplication.Parse();

var result = commandLineApplication.Execute(@"--path=/CUSTDB/1901-0048.rar", "--taskid=1907-7777");//执行命令

result.Should().Be(0);//using FluentAssertions