如何诊断"TestFixtureSetUp失败"

Rog*_*mbe 38 teamcity nunit

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

知道如何调试这个问题吗?测试在我的工作站上运行良好(VS2008中的R#test runner).

Mik*_*Two 25

在TestFixtureSetUp(和TestFixtureTearDown)的实现中,任何异常都没有得到很好的报告,这是一个缺陷.我写了他们的第一个实现,我从来没有按照预期的方式工作.当时NUnit代码中的概念与动作与单个测试直接相关的想法紧密相关.因此,所有内容的报告都与测试结果有关.在没有大量重写的情况下,没有真正的空间来报告在套件级别发生的事情(当你将羊变成自动扶梯时,这不是重构).

由于这一点历史,很难找出TestFixtureSetUp中真正发生的事情.没有附加错误的好地方.TestFixtureSetUp调用是运行测试而不是直接与之相关的副作用.

@TrueWill有正确的想法.检查日志,然后修改测试以在必要时添加更多日志记录.您可能希望在TestFixtureSetup中放入try/catch并在catch块中记录很多.我只是想我可以添加一些背景(换句话说,这是我的错).

  • @迈克 - 谢谢!顺便说一句,我对NUnit的抱怨很少 - 只要我一直在.NET工作,我一直在愉快地使用它. (3认同)
  • rep boost for“当您将绵羊变成自动扶梯时,这不是重构” (3认同)

Tru*_*ill 11

我先检查一下Build Log.

如果不是那么明显,你可以尝试在测试中包含Console.WriteLines - 我不是肯定的,但我认为这些都是写在Build Log中的.或者你可以登录到一个文件(如果你想获得想象,甚至可以使用log4net).

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

但是,我已经看到了路径问题,其中文件的相对路径不再正确或使用了绝对路径.这些更难调试,可能需要记录路径,然后检查它们是否存在于构建服务器上.


小智 7

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

Exception testFixtureSetupException = null;

[TestFixtureSetUp]
public void FixtureSetup()
{
    try
    {
        // DoTestFixtureSetup
    }
    catch (Exception ex)
    {
        testFixtureSetupException = ex;
    }
}

[SetUp]
// NUnit doesn't support very useful logging of failures from a TestFixtureSetUp method. We'll do the logging here.
public void CheckForTestFixturefailure()
{         
    if (testFixtureSetupException != null)
    {
        string msg = string.Format("There was a failure during test fixture setup, resulting in a {1} exception. You should check the state of the storage accounts in Azure before re-running the RenewStorageAccountE2ETests. {0}Exception Message: {3}{0}Stack Trace:{4}",
            Environment.NewLine, testFixtureSetupException.GetType(), accountNamePrefix, testFixtureSetupException.Message, testFixtureSetupException.StackTrace);
        Assert.Fail(msg);
    }
 }
Run Code Online (Sandbox Code Playgroud)