8

我正在使用 NUnit 2.6.3 并进行了以下测试:

using NUnit.Framework;
using System;

namespace NUnit26Tests
{
    [TestFixture]
    public class RandomTests
    {
        [Test]
        public void RandomTest([Random(1, 100, 5)] int value)
        {
            Assert.IsTrue(true);
        }

        [Test]
        public void SuccessTests()
        {
            Assert.That(true, Is.True);
        }
    }
}

但大多数执行时间 (99%) RandomTest并未在 Test Runner 上执行。

这是输出消息窗口:

------ 发现测试开始 ------
NUnit 1.0.0.0 发现测试已启动
NUnit 1.0.0.0 发现测试完成
========== 发现测试已完成:找到 6 个 (0:00:00,9970583) ==========
------ 运行测试开始 ------
NUnit 1.0.0.0 开始执行测试
运行开始:C:\TestProjects\NUnit26Tests\NUnit26Tests\bin\Debug\NUnit26Tests.dll
NUnit 1.0.0.0 执行测试已完成
测试适配器发回未知测试用例的结果。忽略“RandomTest(92)”的结果。
测试适配器发回未知测试用例的结果。忽略“RandomTest(38)”的结果。
测试适配器发回未知测试用例的结果。忽略“RandomTest(69)”的结果。
测试适配器发回未知测试用例的结果。忽略“RandomTest(96)”的结果。
========== 运行测试完成:2 次运行 (0:00:09,271531) ==========

在这种情况下,只执行了五个 RandomTest 中的一个。

我已经使用 runner Nuget Package 进行了测试并安装了 NUnit Runner 扩展,结果相同。

知道有什么问题吗?

4

1 回答 1

4

我能够重现这种行为。这似乎是 NUnit 框架和/或测试适配器中的一个错误。

我的猜测是,随机值在测试运行之前绘制一次(以显示它们)并在运行时绘制一次。抽取的随机值可能不匹配,因此可能无法分配测试结果,从而导致上述错误消息。

您可以在项目的开发站点 ( https://launchpad.net/nunitv2 )上针对此问题打开一个错误,但他们正忙于即将发布的 v3 版本。

作为您的问题的解决方法,我建议您使用静态(随机)值(不使用RandomAttribute)或在测试中绘制随机值(不作为参数):

[Test]
[TestCase(15)]
[TestCase(38)]
[TestCase(2)]
[TestCase(72)]
[TestCase(69)]
public void RandomTest(int value)
{
    Assert.IsTrue(true);
}

更新

在 github 上有一个已知问题。

于 2014-01-14T13:40:58.773 回答