如何在同一个VS解决方案中运行NUnit测试之前启动控制台应用程序?

4
在VS2010中,您可以指定多个启动项目(右键单击解决方案,然后在“启动项目”区域中选择适当的选项)。如果您按F5,则可以正常运行,但是对于NUnit测试,我还没有找到一种在运行测试之前启动这些项目的方法。有办法吗?
约束条件:
1.我不想从dos运行控制台应用程序,因为我需要调试支持。
2.我不想打开一个单独的解决方案。我的理由是切换解决方案和确保编辑进入正确的解决方案会有一些摩擦。在文件发生更改时,VS2010会进行很好的检查,但是,拥有一个与按F5相同工作方式的集成调试体验将更容易。
目前,我正在使用NUnit与Resharper 6.
希望我错过了某个选项。
感谢您阅读此内容。
更新:
目前看起来是不受支持的情况。目前我正在考虑将测试作为控制台应用程序启动。可能我会创建一种手动指定一个测试或所有测试的方式。
即使在测试运行器之外运行,能够获得成功/失败报告也是很好的。这又回到了手动操作吗?
解决方案:
Pedro在评论中发布了以下解决方案链接: 对于*C:\Program Files (x86)\NUnit 2.5.10\bin\net-2.0*中的这些文件:
  • nunit.exe.config

  • nunit-x86.exe.config(对我很重要)

我做了以下设置更改:
在下添加:
    <startup>
      <supportedRuntime version="v4.0.30319" />
    </startup>

"在下添加:"
    <loadFromRemoteSources enabled="true" />

创建单元测试的整个目的是为了测试一个代码片段作为单个单元而没有任何依赖关系。如果有依赖关系,您可以使用模拟对象。 - Asdfg
你启动的控制台应用程序的目的是什么?如果你依赖于其他东西,那么你很可能已经超出了“单元测试”应该做的范围。 - DoctorMick
@DoctorMick:测试消息总线提供的服务消费。控制台应用程序代表发布者在发布/订阅模式中。 - sgtz
根据您的评论,您依赖于Publisher,并且可能想要创建一个Mock对象。 - Asdfg
@Asdfg:我在几个地方做一些模拟类型的东西。这个需求有点不同。 - sgtz
显示剩余2条评论
3个回答

2

在另一个问题中,我发布了解决方案,可以通过按下F5键来运行NUnit GUI。如果您将单元测试和控制台应用程序项目都设置为运行,则应该可以获得所需的结果。


+2(每个帖子一个!)。我现在要看一下。谢谢。 - sgtz
我尝试过了。我从NUit那里收到了一个错误信息“System.BadImageFormatException...您可能正在尝试加载使用较新版本的CLR构建的程序集”。这是真的。这是一个4版本的图像。 - sgtz
你是在构建32位还是64位汇编?我猜测你的测试汇编与正确的NUnit GUI不匹配。在你的NUnit安装目录中,你应该有nunit.exe和nunit-x86.exe两个文件。你需要选择与测试汇编相匹配的那一个。 - Pedro
没错,就是这样。有几个问题。启动nunit有点慢,而且还出现了“当前断点将不会被命中”的消息。也无法附加到nunit-x86进程。 - sgtz
如果断点无法命中,那么 NUnit 可能会启动第二个进程。这里有一些帖子可能会有所帮助:https://dev59.com/K0_Ta4cB1Zd3GeqPFPWw 和 https://dev59.com/rHNA5IYBdhLWcg3wgeOk - Pedro

1
根据此页面所述,NUnit具有[TestFixtureSetUp]属性,该属性将在运行任何其他单元测试之前运行一次。虽然我自己没有使用过NUnit,但我认为您应该能够在标记有此属性的方法中启动任何必要的先决程序。由于代码像任何其他代码一样执行,因此我认为它也可以像任何其他代码块一样进行调试。

TestFixtureSetUp 主要用于创建单元测试数据、定义全局变量或模拟对象。不要在其中启动控制台应用程序。 - Asdfg
1
@Asdfg 不做或不能做还是不应该做?虽然我同意模拟可能是最正确的做法,但如果有人不想这样做,我认为这也是一个替代方案。 - Shaun Hamman
你正在破坏单元测试的整个目的,因为你在其中创建了实时依赖关系。没有人会阻止你这样做,但如果由于某种原因你的发布器停止工作,你的单元测试用例将失败,即使你不关心发布器是否工作,因为它不在单元测试范围内。 - Asdfg
好的。我同意关于单元测试定义中作用域问题的看法。然而,在这种情况下,我认为增加作用域非常重要。 - sgtz

1

由于您正在使用Resharper作为测试运行程序,我很好奇您是否尝试过以下操作。将解决方案的启动项目设置为您想要的控制台应用程序,然后按F5。然后,右键单击您要运行的测试项目/文件,然后单击“运行单元测试”。

看起来Resharper在解决方案处于运行状态时隐藏了“调试单元测试”选项,但是如果您想要调试控制台应用程序方面的问题,则可能适用于您(此时完全未经测试)。我认为您将无法使用此方法调试测试方面的问题。

当然,这与Resharper的测试运行程序有关,如果您想在持续集成构建系统或通过NUnit GUI / Console执行此操作,则此方法甚至无法帮助您。


+1 不错的想法。我认为这对于信号应用程序可能会起作用。因此,我可能会在ReSharper和nunit配置设置之间交替使用,因为ReSharper具有更快的启动时间(请参见已接受的答案)。 - sgtz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接