Nunit 如何诊断;TestFixtureSetUp失败“;

Nunit 如何诊断;TestFixtureSetUp失败“;,nunit,teamcity,Nunit,Teamcity,我们使用TeamCity作为CI服务器,我刚刚开始在测试失败窗口中看到“TestFixtureSetUp Failed” 知道我如何调试这个问题吗?测试在我的工作站(VS2008中的测试运行程序)上运行良好。我会先检查构建日志 如果这一点不明显,您可以尝试在测试中包括Console.writeline-我不是肯定的,但我认为它们会写入构建日志。或者,您可以登录到一个文件(如果您想玩得开心,甚至可以使用log4net) 如果在CI服务器上安装了Visual Studio,则可以尝试从那里运行生成/

我们使用TeamCity作为CI服务器,我刚刚开始在测试失败窗口中看到
“TestFixtureSetUp Failed”


知道我如何调试这个问题吗?测试在我的工作站(VS2008中的测试运行程序)上运行良好。

我会先检查构建日志

如果这一点不明显,您可以尝试在测试中包括Console.writeline-我不是肯定的,但我认为它们会写入构建日志。或者,您可以登录到一个文件(如果您想玩得开心,甚至可以使用log4net)

如果在CI服务器上安装了Visual Studio,则可以尝试从那里运行生成/测试。如果这是一个连接问题,这可能会解决它


不过,我也看到过路径问题,即文件的相对路径不再正确,或者使用了绝对路径。这些更难调试,并且可能需要记录路径,然后检查它们是否存在于构建服务器上。

在TestFixtureSetUp(和TestFixtureTearDown)的实现中有一点缺陷,即没有很好地报告任何异常。我编写了它们的第一个实现,但我从未让它按预期的方式工作。当时,NUnit代码中的概念与动作与单个测试直接相关的想法紧密耦合。所以所有的报告都与测试结果有关。在没有大量重写的情况下,实际上没有空间报告在套件级别发生的事情(当你把一只羊变成自动扶梯时,这不是重构)

由于这段历史,很难找出TestFixtureSetUp中到底发生了什么。没有一个好地方可以附加错误。TestFixtureSetUp调用是运行测试的副作用,而不是与测试直接相关


@特鲁威尔的想法是正确的。检查日志,然后根据需要修改测试以添加更多日志。您可能希望在TestFixtureSetup中放置at try/catch,并在catch块中记录大量内容。我只是想我可以给它添加一些背景知识(换句话说,这是我的错)。

我有这个问题,它是由在类中添加一个私有只读
字典引起的,与添加
私有常量字符串的方式大致相同


我试图将
字典
设为常量,但在编译时不能这样做。我通过将我的
字典
放在一个返回它的方法中解决了这个问题。

在使用Visual NUnit运行SpecFlow的任何测试时,我遇到了相同的错误。当我尝试在单元测试资源管理器(由Resharper提供)中执行同样的操作时,它给出了一个更有用的消息:不支持具有10个以上参数的绑定方法。我意识到我不能拥有超过10个参数的SpecFlow方法,必须删除测试。

通过快速切换到VS单元测试,我发现我没有正确创建测试数据库。就我而言,它能够对失败的原因做出更好的回应。我通常用NUnit。 无法创建类X的实例。错误:System.Data.SqlClient.SqlException:发生文件激活错误。物理文件名“\DbTest.mdf”可能不正确。请诊断并更正其他错误,然后重试该操作。 创建数据库失败。无法创建列出的某些文件名。请检查相关错误。。

我的这种症状是由字段初始化期间的错误引起的。如果在
[SetUp]
方法中初始化字段,应该会看到更好的错误消息

[TestFixture]
内部类CommandParserTest
{
//模糊错误消息
私有CommandParser=newcommandparser(…);
...
}
[测试夹具]
内部类CommandParserTest
{
私有命令解析器;
[设置]
测试前公共无效()
{
//更好的错误消息
parser=newcommandparser(…);
}
...
}

我今天为此感到困扰。为了得到实际的错误,我做了以下操作

(1) 在一个单独的fixture中编写另一个测试,它初始化麻烦的测试fixture的一个实例,显式调用setup方法,如TestFixtureSetUp和setup(如果有的话),然后执行目标测试方法


(2) 为上面的新代码添加异常处理代码,并将实际异常记录/输出到某处。

我今天在创建一些集成测试时遇到了这个问题,这些测试具有长期运行的设置,我不想重复。最后,我将所有测试夹具设置逻辑包装在一个try/catch中。然后,我添加了一个设置方法,其唯一目的是查看夹具设置期间是否发生故障,并提供更好的日志记录

异常testFixtureSetupException=null; [TestFixtureSetUp] public void FixtureSetup() { 尝试 { //DoTestFixtureSetup } 捕获(例外情况除外) { testFixtureSetupException=ex; } } [设置] //NUnit不支持从TestFixtureSetUp方法记录非常有用的故障。我们将在这里进行日志记录。 public void CheckForTestFixturefailure() { if(testFixtureSetupException!=null) { string msg=string.Format(“在测试夹具设置过程中出现故障,导致{1}异常。在重新运行RenewStorageAccountE2ETests之前,您应该检查Azure中存储帐户的状态。{0}异常消息:{3}{0}堆栈跟踪:{4}”, Environment.NewLine、testFixtureSetupException.GetType()、accountNamePrefix、testFixtureSetupException.Message、testFixtureSetupException.StackTrace); Assert.Fail(msg); } }
在调试模式下运行单元测试。您可能会在安装程序中发现运行时错误。

您可以捕获异常并将其写入拆卸控制台中

比如:

[SetUpFixture]
公共类基类测试
{
私有异常caughtException=null;
[设置]
public void RunBeforeAnyTests()