【问题标题】:Set command line arguments in unit tests in C#在 C# 的单元测试中设置命令行参数
【发布时间】:2013-06-14 13:49:05
【问题描述】:

是否可以在 VS2012 的单元测试中设置命令行参数? 如果没有,除了编写批处理文件之外,还有其他方法可以测试这些参数的多种组合吗?

编辑: 我有一个控制台程序,它读取并解析传递的命令行参数。 我想确保无论传递什么命令行参数,程序都具有正确的行为。我不想一遍又一遍地尝试所有组合,我想编写一个单元测试来设置参数并使用它们启动我的程序。

我不使用任何特定的测试框架。只是 Visual Studio 通过创建一个新的测试项目提供的一个。

【问题讨论】:

  • 不清楚您要测试什么?应用程序的 Main(..) 方法?
  • 问题不清楚。这也取决于根据您使用的测试框架提供此类参数的能力。 MSTest、nUnit 等
  • I don't use any specific test framework. Just the one provided in Visual Studio by creating a new test project. 这意味着您正在使用 MSTest。

标签: c# unit-testing mstest command-line-arguments


【解决方案1】:

为什么不将解析逻辑提取到一个单独的类和单元测试中,与你的 main() 分开?

解析类应该接收字符串参数。因此,您可以在不同的测试中根据需要测试尽可能多的场景,而无需实际运行程序可执行文件,只需调用类即可。

更新

现在,如果您不想创建额外的类(我可能仍然会这样做,只是为了清楚起见,但无论如何),请考虑到您可以从单元测试中调用静态 Main(string[] args) 方法,传递不同的参数来覆盖不同的场景。

【讨论】:

  • 好主意,但这意味着仅仅因为单元测试而创建一个单独的类。我的架构不需要一个只用于解析的类。
  • 用更多信息更新了答案
  • 感谢您的更新,但 Main 方法默认是私有的。
  • 好吧,用代码声明一个公共方法,然后从您的 Main 和您的测试中调用该方法。我没有看到阻止您通过单元测试而不是批处理文件和调用可执行文件进行相应测试的原因。或者您可以将方法声明为内部,并通过InternalsVisibleTo 程序集属性授予对单元测试程序集的访问权限。
  • 只是因为单元测试才改变访问修饰符的想法。我认为这是糟糕的编程风格。但我看到除了你提到的两个之外没有其他选择。我将决定选择哪一个。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2017-09-09
  • 2016-09-08
  • 2011-08-22
  • 1970-01-01
  • 2021-11-28
相关资源
最近更新 更多