【问题标题】:NUnit running in visual studio with coderush or testdriven.net "no tests found"NUnit 在带有 coderush 或 testdriven.net 的 Visual Studio 中运行“未找到测试”
【发布时间】:2011-07-19 01:21:56
【问题描述】:

我的公司一直在使用 MSTest 和 NUnit。我现在将我们切换为仅使用 NUnit。 代码充满了架构问题,所以我们可以忽略这些并研究如何让它真正工作。我猜,主要问题是数据库连接的设置是直接从 ConfigurationManager.AppSettings[] 中提取的。在这种情况下,它的“SettingsFile”路径。它是我们主配置文件的路径。

我提出这个问题的原因是,当“SettingsFile”存在时,NUnit 会出错,如果我将它命名为 SettingsFile2,它不会出错。我还在我的代码中重命名了对它的引用,所以它仍然有效,只是不再出错了。

当 NUnit 抛出错误时,它返回未找到任何测试。

我认为“SettingsFile”可能是为 NUnit 保留的一些 appSetting,听起来很荒谬,但我没有发现任何相关的内容。

我还创建了一个完全空白的项目。添加了一个测试 C# 测试模板项目,添加了一个 nunit 测试,添加了一个 app.config,对其进行了测试并且它工作正常。我什至有相同的 app.config 设置。

重申一下: 如果我进入测试项目的 app.config,将 key="SettingsFile" 更改为 key="SettingsFile2",然后将我的配置类更改为 ConfigurationManager.AppSettings["SettingsFile2"] 并且没有其他任何更改,它现在将正确构建。为什么会这样?

我知道解决方案是不在 appSettings 中使用“SettingsFile”这个词...但它已经在我们所有的生产服务器、测试服务器、暂存服务器、开发服务器等中使用。我们没有更新它们的简单方法,但如果我们也有,我只需要向经理争论我的观点。

DXCore 测试的输出:

Testing started:

Exception:
Message: Exception has been thrown by the target of an invocation.
Source: mscorlib
StackTrace:
   at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at CR_ExtUnitTestRunner.Invoker.InvokeInThread()
InnerException:
Exception:
Message: Error loading settings file
Source: nunit.util
StackTrace:
   at NUnit.Util.XmlSettingsStorage.LoadSettings()
   at NUnit.Util.SettingsService..ctor(Boolean writeable)
   at NUnit.Util.SettingsService..ctor()
   at CR_NUnitTesting.Executor.Initialize()
   at CR_NUnitTesting.Executor.Execute(ExecuteTestData data)
   at CR_NUnitTesting.NUnitExtension.Execute(Int32 major, Int32 minor, ExecuteTestData data)
   at CR_NUnitTesting.NUnitExtension.<InitializePlugIn>b__2(ExecuteTestData data)
InnerException:
Exception:
Message: Object reference not set to an instance of an object.
Source: nunit.util
StackTrace:
   at NUnit.Util.XmlSettingsStorage.LoadSettings()
No tests found.
Duration : 5.25776431101399

更新:

添加对我们的 CORE 项目的引用会导致问题。 核心项目是读取 SettingsFile 属性的项目。 请注意,我在任何访问 SettingsFile 之前放置了 IO 文件写入,并且没有记录任何内容。 我在 CORE 项目中搜索了静态类构造函数。没有了。 我不知道为什么添加引用会破坏这一点。

更新:

coderush 中的单元测试运行程序不会更新以显示正确的测试。 我将配置设置更改为“SettingsFile2”,以便测试运行良好,然后单元测试运行程序正确更新。但是当我右键单击一个测试并说去测试时,它现在会显示所有曾经存在过的测试,这些测试现在都被删除了。

另一件奇怪的事: Coderush 会打印两次结果,但只运行一次测试。

正在搜索测试... 总测试:2,过滤:1

CanConfirmDatabaseMatchesMappings 失败: ... CanConfirmDatabaseMatchesMappings 失败: ...

【问题讨论】:

    标签: visual-studio configuration nunit coderush


    【解决方案1】:

    我们(DevExpress)已复制该问题并将其注册到我们的database。 CodeRush 单元测试运行器的修复几乎已准备就绪。一旦错误状态发生更改,欢迎您从问题页面请求包含修复的每日构建。

    【讨论】:

    • 你是如何复制它的?我尝试在空白解决方案中复制,但无法复制。
    • 我已要求 Test Runner 开发人员对其进行调查,他们回答说“未找到测试”问题已被重现。一旦问题的状态发生变化,我们将回复详细信息。
    • 这里是有关此问题的一些附加信息。当 CodeRush Unit Test Runner 运行测试时,它将 Directory.CurrentDirectory 值设置为 TestAssemblyPath,它被检测为 Path.GetDirectoryName(TestAssembly)。 NUnit SettingsService 尝试从 ConfigurationManager.AppSettings["SettingsFile"] 获取文件名设置。因此,如果 TestAssemblyPath 包含 .config 文件(例如,如下所示):
    • NUnit SettingsService 从“[SettingsFileDirectory]\Settings.settings”获取设置并失败,因为该内容无效。现在我们已经排除了 NUnit SettingsService 初始化,因为它没有影响 CodeRush Unit Test Runner 的功能。
    • 嘿,我收到了你发送的补丁,但它没有解决任何问题。一样的老'一样的'
    猜你喜欢
    • 2012-07-03
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多