C# 单元测试 (Nunit) 控制台应用程序的主要方法?

标签 c# unit-testing nunit console-application

我对控制台应用程序的 Main 方法进行单元测试有疑问。标准签名是

  public static void Main(string[] args)

我希望能够进行测试以确保只传入 1 个参数。如果传入了多个参数,我希望测试失败。

我不认为我可以用 MOQ 来模拟它作为它的静态方法。

谁有这方面的经验?

有什么想法吗?

谢谢

最佳答案

在您的场景中没有什么可模拟的。静态 Program.Main 是一种与任何其他方法一样的方法,您可以通过调用它来测试它。

static void 方法的问题是您只能验证它是否抛出异常或与输入参数(或其他静态成员,最终)交互。由于在 string[] 上没有任何交互,您可以测试前一个案例。

但是,更合理的方法是将Main 中包含的所有 逻辑委托(delegate)给分离组件并对其进行测试。这不仅可以让您彻底测试输入参数处理逻辑,还可以将 Main 简化为大致如下:

public static void Main(string[] args)
{
    var bootstrapper = new Bootstrapper();
    bootstrapper.Start(args);
}

关于C# 单元测试 (Nunit) 控制台应用程序的主要方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24507290/

相关文章:

selenium - 海狸鼠截图

c# - 在Azure Pipeline上运行NUnit测试脚本时遇到多个错误

c# - 使用 MeasureString 时出现 "A generic error occurred in GDI+"

c# - 在不使用复选框的情况下在具有下拉列表的组合框中选择多个值

ruby-on-rails - 在 Controller 中使用 using 方法测试辅助方法

spring - 获取 Spring 错误 "Bean named ' x' 必须是 [y] 类型,但实际上是 Jenkins 中的 [$Proxy] 类型

c# - 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

c# - 如何使用 C# 在 Active Directory 中获取组所属的组?

c# - 如何在我的 MSTest 单元测试中检查 "no exception occurred"?

F# NUnit 测试将值设置为 null