如何在visual studio中使用NUnit强制测试最后一次运行

本文关键字:NUnit 测试 运行 最后一次 visual studio | 更新日期: 2023-09-27 18:03:49

所以在我的测试套件中,我有一个集成测试继承的抽象基类。此基类的每个派生都有自己的一组测试。子类所做的断言通过基类上的受保护方法运行。在这些断言期间,基类记录字典中已测试的值。在子类运行了它们所有的测试之后,我希望基类运行一个测试来验证测试了所有正确的东西。

一些免责声明:

    是的,我知道这是一个有序的测试,那些是皱眉头的在。无论如何,这是我想做的事情。从某种意义上说,我知道这是一个测试我的测试套件的测试。虽然这是虽然经常被人嗤之以鼻,但我发现它很有用。如果你想让你的测试真正作为您的文档,最好有一些基本的验证文档中一些基本内容的测试例如,它是完整的。(在大多数项目中,这可能会太过分了,不值得。然而,在这个特殊的项目中,这既是一个个人项目,也是一个100%工作的实验代码覆盖率)。

目前,我已经用[Test][TestFixtureTearDown]标记了总结测试,这使得测试在最后运行。然而,这也意味着当测试失败时,测试套件会因为失败而生气。我想要的理想世界是像《RunLast》这样的东西。有什么办法可以做到这一点吗?

当前代码示例:

[TestFixture]
public abstract class AttributesTests : IntegrationTests
{
    [Inject]
    public IAttributesMapper AttributesMapper { get; set; }
    protected abstract String tableName { get; }
    private Dictionary<String, IEnumerable<String>> table;
    private List<String> testedNames;
    [TestFixtureSetUp]
    public void FixtureSetup()
    {
        testedNames = new List<String>();
    }
    [SetUp]
    public void Setup()
    {
        table = AttributesMapper.Map(tableName);
    }
    [Test, TestFixtureTearDown]
    public void AllNamesTested()
    {
        var missingNames = table.Keys.Except(testedNames);
        Assert.That(missingNames, Is.Empty, tableName);
    }
    [Test, TestFixtureTearDown]
    public void NoNamesTestedNultipleTimes()
    {
        var duplicateNames = testedNames.Where(n => testedNames.Count(cn => cn == n) > 1).Distinct();
        Assert.That(duplicateNames, Is.Empty, tableName);
    }
    protected void AssertAttributes(String name, IEnumerable<String> attributes)
    {
        testedNames.Add(name);
        Assert.That(table.Keys, Contains.Item(name), tableName);
        foreach (var attribute in attributes)
        {
            Assert.That(table[name], Contains.Item(attribute));
            var actualAttributeCount = table[name].Count(a => a == attribute);
            var expectedAttributeCount = attributes.Count(a => a == attribute);
            Assert.That(actualAttributeCount, Is.EqualTo(expectedAttributeCount));
        }
        var extraAttributes = table[name].Except(attributes);
        Assert.That(extraAttributes, Is.Empty);
    }
}

如何在visual studio中使用NUnit强制测试最后一次运行

这个适合我:

namespace ZZZ
public class ZZZZZ {
  [Test]
  public void ZZZZLastTest() {
    // Whatever . . . 
  }
}

我知道没有明确的[LastTest] -like属性,但我相信你可以用[Suite]代替。

我知道这种JUnit套件方法将按照定义的顺序按线性顺序执行测试类(尽管不能保证在一个类内执行测试的顺序)。

@RunWith(Suite.class)
@SuiteClasses({ CalculatorTestAdd.class, CalculatorTestSubtract.class })
public class AllTests {
}

这里CalculatorTestSubtract将最后执行。记住这一点,我想说你应该创建一个套件,在最后有你的总结测试。

查看NUnit文档,我看到一些东西应该是同样可能的:

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;
  private class AllTests
  {
    [Suite]
    public static IEnumerable Suite
    {
      get
      {
        ArrayList suite = new ArrayList();
        suite.Add(new OneTestCase());
        suite.Add(new AssemblyTests());
        suite.Add(new NoNamespaceTestFixture());
        return suite;
      }
    }
  }
}

你必须做一些测试,看看它们是否被线性执行,因为ArrayList不能保证被排序。