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