1

有人可以建议一种在 Visual Studio 2013 Express 中按特定顺序运行测试的方法吗?有没有办法为测试创建一个播放列表,它还定义了运行它们的顺序?

顺便说一句:这些是功能测试,使用 Selenium,在 C#/Visual Studio 中作为单元测试编写。不是实际的单元测试。有时,回归测试套件太大,需要一段时间才能运行所有测试。在这些情况下,我经常看到需要按优先顺序运行测试。或者,在某些情况下,如果之前没有运行过其他一些测试,就很难运行一些测试。在这方面,它比直接的单元测试要复杂一些(这就是为什么它通常由测试专业人​​员完成,而单元测试由开发人员完成的原因)。

我用相关的测试方法将测试组织在类中。例如:所有登录测试都在一个名为 LoginTests 的类中,等等。

Class LoginTests:
- AdminCanLogin (...)
- UserCanLogin (...)
- IncorrectLoginFails (...)
- ...

CreatePostTests
- CanCreateEmptyPost (...)
- CanCreateBasicPost (...)
...

这些类是单元测试类,在他们自己的项目中。它们依次调用使用 Selenium 的类库中的类和方法。

MS 建议创建一个“有序单元测试”项目。但是,这在 Express 版本中不可用。

4

1 回答 1

4

要解决您的播放列表请求,请直接查看 MS 文章:http: //msdn.microsoft.com/en-us/library/hh270865.aspx Resharper 也有一个不错的测试播放列表工具。

这是一篇关于如何设置有序测试的文章,但您不能将此功能与 Express 一起使用,因为它需要 Visual Studio Ultimate、Visual Studio Premium、Visual Studio Test Professional。http://msdn.microsoft.com/en-us/library/ms182631.aspx

如果您需要订购它们,那么它们更有可能是集成测试。我假设您希望订购它们,以便您可以为测试准备数据或在测试后撕下数据。

如果是这种情况,有几种方法可以满足此要求。使用 MSTest 有 4 个属性,您可以在此处查看有关何时执行它们的更多详细信息http://blogs.msdn.com/b/nnaderi/archive/2007/02/17/explaining-execution-order.aspx

我的另一个建议是有一个辅助类来执行您希望按顺序完成的任务(而不是测试),要明确的是,这个类不会是一个测试类,只是一个具有通用功能的普通类,可以从在您的测试中。

如果您需要测试来创建产品,以便另一个测试可以使用该产品并测试它是否可以添加到购物车中,那么我将创建一个“SetupProduct”方法来为您执行此操作,因为我相信您会测试各种需要产品的东西。这将阻止您拥有测试依赖项。

话虽如此,集成测试可以很好地验证端到端流程,但在可能和适用的情况下,模拟一些或所有依赖项(例如存储库)可能会更容易。我使用 Moq 框架,发现它很容易使用。

这段代码来自上面链接的博客文章,我把它放在这里以防链接失效。

这是一个使用 setup / tear down 属性来帮助您进行测试的测试类示例。

[TestClass]
public class VSTSClass1
{

    private TestContext testContextInstance;

    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }

    [ClassInitialize]
    public static void ClassSetup(TestContext a)
    {
        Console.WriteLine("Class Setup");
    }

    [TestInitialize]
    public void TestInit()
    {
        Console.WriteLine("Test Init");

    }

    [TestMethod]
    public void Test1()
    {
        Console.WriteLine("Test1");
    }

    [TestMethod]
    public void Test2()
    {
        Console.WriteLine("Test2");

    }

    [TestMethod]
    public void Test3()
    {
        Console.WriteLine("Test3");
    }

    [TestCleanup]
    public void TestCleanUp()
    {
        Console.WriteLine("TestCleanUp");
    }

    [ClassCleanup]
    public static void ClassCleanUp()
    {
        Console.WriteLine("ClassCleanUp");
    }
}

这是触发方法的顺序。

Class Setup
Test Init
Test1
TestCleanUp
Test Init
Test2
TestCleanUp
Test Init
Test3
TestCleanUp
ClassCleanUp

如果您提供有关您要完成的工作的更多信息,我很乐意帮助您了解何时使用哪个属性或何时使用帮助类,请注意帮助类不是测试类,只是一个标准类,它具有您的方法可以用来执行多个测试可能需要的常见任务。

于 2014-06-19T12:42:35.487 回答