代码之家  ›  专栏  ›  技术社区  ›  Alex Weinstein

Visual Studio 2008中单元测试的执行顺序

  •  1
  • Alex Weinstein  · 技术社区  · 15 年前

    unit tests 为我的Visual Studio 2008解决方案定义。这些测试在多个文件中的多个方法和多个类中定义。

    blog article 当使用 MSTest ,认为您可以依赖测试的执行顺序是错误的:

    由于测试类的每个实例都在不同的线程上分别实例化,因此没有任何保证 跨班级。测试的执行可以交叉进行 执行您的测试。这里的关键是所有的测试都可能是 以任何顺序执行,它都是完全未定义的。

    预执行步骤 我实际上想以某种方式定义一个执行顺序 . 例如,1)首先创建数据库;2) 测试它是否被创建;然后3)以任意顺序运行剩余的50个测试。

    有什么办法吗?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Fredrik Mörk    15 年前

    关于设置数据库的预测试步骤,您可以通过创建一个方法并用 ClassInitialize 属性这将使测试框架在测试类中的任何其他方法之前执行该方法:

    [ClassInitialize()]
    public static void InitializeClass(TestContext testContext) 
    { 
        // your init code here
    }
    
        2
  •  1
  •   Jason Williams    15 年前

    单元测试都应该独立工作,并且不应该相互依赖,否则不能单独运行单个测试。

    然后,需要数据库的每个测试都应该按需创建它(如果还没有创建,那么可以使用singleton/static类来确保如果在一个批处理中执行多个测试,那么数据库实际上只创建一次)。

    那么先执行哪个测试就无关紧要了;它将在测试第一次需要使用数据库时创建。

        3
  •  0
  •   Dimitrios Staikos    12 年前

    理论上,测试应该相互独立,并且能够独立运行是正确的。但在实践中,理论和实践之间存在差异,VS2010的固定执行顺序(总是相同的随机顺序)让我很难接受。


    我有一个单元测试,它交叉检查一些表之间的日期,并验证所有内容是否一致。显然,在空数据库上运行这个测试是没有用的,所以我想在插入数据的单元测试之后运行一段时间。很抱歉,VS2010不允许您这样做。
    好的,酷,那么我将把它添加到插入单元测试中作为结束语。但是我想交叉检查其他10件事,而不是进行单元测试(“确保可以插入具有各种参数的实体而不会崩溃”),我最终进行了一个大型测试。

    然后是另一个案例。

    有趣的是,由于这种情况,我的单元测试开始慢慢转变为大型测试,完成(每个)测试需要30分钟以上,然后VS2010会将它们超时,因为默认测试超时时间是30分钟。天哪,请帮忙!:-)