【问题标题】:C# Unit Testing(Nunit) the Main method of a console app?C#单元测试(Nunit)控制台应用程序的主要方法?
【发布时间】:2014-07-01 09:52:09
【问题描述】:

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

  public static void Main(string[] args)

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

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

有人有这方面的经验吗?

有什么想法吗?

谢谢

【问题讨论】:

  • 为什么需要模拟它?是否有无法调用的依赖?
  • 应该在运行时在你的 main 方法中检查输入。为什么这对您的单元测试至关重要?
  • 给未来读者的注意事项:签名可以更改为static int Main,我有时会使用该返回信号来创建单元测试

标签: c# unit-testing nunit console-application


【解决方案1】:

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

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

然而,一种更合理的方法是将Main 中包含的所有 逻辑委托给单独的组件并对其进行测试。这不仅可以让您彻底测试您的输入参数处理逻辑,还可以将Main 或多或少地简化为:

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

【讨论】:

  • 有什么方法可以在不重构的情况下做到这一点?
  • 你能测试一下引导程序被正确调用了吗?假设动机是代码覆盖率指标。
猜你喜欢
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多