Visual Studio 2013:创建有序测试

时间:2014-06-19 12:23:05

标签: unit-testing visual-studio-express ordered-test

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

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

我已经在课程中用相关的测试方法组织了测试。例如:所有登录测试都在名为LoginTests等的类中。

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

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

这些类是他们自己的项目中的单元测试类。他们反过来调用使用Selenium的类库中的类和方法。

MS建议创建一个“有序单元测试”项目。但是,Express版本不提供此功能。

1 个答案:

答案 0 :(得分: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

如果您提供有关您要完成的内容的更多信息,我很乐意帮助您何时使用哪个属性或何时使用帮助类,请注意,帮助程序类不是测试类,只是一个标准类,有可用于执行多项测试可能需要的常见任务的方法。