我单元测试的代码是指app.config文件中的appsetting。为了满足这个需求,我在我的单元测试项目中添加了一个app.config文件。如果单击“单元测试会话”窗口中的“运行所有测试”图标,我的所有测试都会通过。
我已将“ReSharper.ReSharper_UnitTest_RunSolution”命令映射到Ctrl + Shift + Alt + U.如果我通过按下这个组合来运行测试,测试全部运行,但是他们找不到appsetting,它通过null返回。
我假设这意味着按钮单击在测试项目的上下文中运行,而命令没有,但我无法确定该命令正在做什么。
我是否映射了错误的命令?
编辑1:我也尝试使用键盘快捷键Alt-RUN(Resharper>单元测试>全部运行),以及手动点击菜单,发现这也是导致所有单元测试不找到appsetting因此失败。单击“单元测试会话”中的“运行所有测试”图标(双绿色箭头)继续正常工作。
编辑2:我意识到我应该嘲笑一个单独的类,无论如何从配置文件中获取appsettings,所以这就是我现在正在做的事情。所以现在单元测试时没有依赖配置文件。
答案 0 :(得分:3)
这里有两件事。首先,会话窗口中的“运行所有测试”图标将运行会话中的所有测试 ,而“运行所有测试”菜单项将运行解决方案中的所有测试 。稍微混淆他们有相同的名字,但鉴于上下文它确实有意义。这就是他们给出不同结果的原因。
其次,在解决方案中运行所有测试时,可能无法找到应用程序设置。这是由于测试运行器进行的优化,它在同一个AppDomain中运行所有测试。这避免了为每个程序集创建新AppDomain的开销,但是缺点是只有一个app.config将用于所有程序集。如果选错了,您的应用设置就会丢失。
您可以通过取消选中ReSharper»选项»单元测试»“为每个带有测试的程序集使用单独的AppDomain”来禁用此功能。理想情况下,如果任何项目有app.config,它应该被禁用 - 我添加了一个功能请求,您可以投票并跟踪:https://youtrack.jetbrains.com/issue/RSRP-428958