【问题标题】:NUnit TestFixtureSetUp runs multiple times?NUnit TestFixtureSetUp 运行多次?
【发布时间】:2012-07-03 18:06:04
【问题描述】:

我在 Visual Studio 2010 中使用 NUnit 2.6 和 Visual NUnit 进行了基本测试设置。我的问题是,当我运行所有测试时,FixtureSetup 方法(具有 TestFixtureSetUpAttribute)似乎为每个测试运行一次测试。

我也尝试将 Init 代码放入构造函数,但结果相同。

测试本身会向运行时报告它们的运行时间,例如 0.003 和 0.032 等。

    [TestFixture]
    public class MODatabaseTests
    {
        [TestFixtureSetUp]
        public static void FixtureSetup()
        {
           // Perform heavy init (~1.5s)
        }

        [Test]
        public void TestA()
        {
            ...
        }

        [Test]
        public void TestB()
        {
            ...
        }

    }

【问题讨论】:

  • 看起来像——你能调试(或至少是 Console.Write),这样你确定它会被多次命中吗?
  • 我不能。如果我添加 Console.WriteLine 它在 Visual NUnit 中运行时不会显示。
  • Visual NUnit 如何报告?
  • 这似乎是一个“Visual NUnit”问题,因为如果我在 NUnit GUI 测试器中运行它,它会按预期工作......这真的很奇怪。
  • Visual NUnit 将测试的运行时间报告为 0.03、0.32、0.082 秒等。但它肯定会花费更多时间。

标签: c# visual-studio-2010 nunit


【解决方案1】:

如果您添加此代码,您可以确认您的怀疑:

    private static bool initialized = false;
    [TestFixtureSetUp]
    public static void FixtureSetup()
    {
        if (initialized) Assert.Fail("fixture setup called multiple times");
        initialized = true;
        ...
    }

测试运行器可能会单独调用每个测试,而不是将 TestFixture 视为一组测试。

顺便说一句,我会在单元测试中避免使用static,因为如果您有任何静态变量,它们的状态将在每次运行时携带(尽管夹具类型想要这样)并且您丢失了“单元”部分单元测试。

【讨论】:

  • 是的,这行得通。像我一样工作,我可以确认它正在运行多次。这可能意味着我猜“Visual NUnit”有一个弱点。当他们使用 NUnit 提供的 GUI 工具修复 ut 时,我将能够解决这个问题。
  • 酷——如果你有时间的话,我相信 Visual Nunit 开发者会很感激错误报告。
  • 我同意。在 sourceforge 上发布错误 :) 感谢您的输入
  • 您能否发布错误报告的链接。我想关注它。
  • @AndersLindas:这里有一条适合你的评论。
猜你喜欢
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多