【问题标题】:Visual Studio Ordered Tests running twiceVisual Studio 有序测试运行两次
【发布时间】:2013-03-08 00:40:55
【问题描述】:

所以我有一个非常简单的设置来初始化 LocalDB 数据库以运行一些集成测试。

在我的设置中,我按如下方式初始化我的测试:

[AssemblyInitialize]
public static void AssemblyInitialize(TestContext context)
{
    AppDomain.CurrentDomain.SetData(
    "DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ""));

    System.Data.Entity.Database.SetInitializer(new MyDatabaseInitializer());
}

public class MyDatabaseInitializer : System.Data.Entity.DropCreateDatabaseAlways<Context>
{
    protected override void Seed(Context context)
    {
        // Add entities to database.
        context.Blogs.AddOrUpdate(x => x.Title, new Blog
        {
            BlogId = Guid.NewGuid(),
            Title = "some Title"
        });

        context.SaveChanges();
    }
}

我有三个这样的测试:

[TestMethod]
[DeploymentItem("Database1.mdf")]
[DeploymentItem("UnitTestProject1.dll.config")]
public void initialize()
{
    
}

[TestMethod]
public void TestMethod1()
{
    var ctx = new Context();

    var res = ctx.Blogs.ToList();

    res.Should().NotBeNull().And.HaveCount(1);
}

[TestMethod]
public void it_should_be_able_to_add_a_new_blog()
{
    var ctx = new Context();

    ctx.Blogs.Add(new Blog {BlogId = Guid.NewGuid(), Title = "OMFG " + DateTime.Now.ToShortDateString()});

    ctx.SaveChanges();

    ctx.Blogs.Should().HaveCount(2);
}

我有一个 OrderedTest 文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<OrderedTest name="orderedtest1" storage="c:\users\jolmos\documents\visual studio 2012\projects\consoleapplication9\unittestproject1\orderedtest1.orderedtest" id="cc545e78-c463-4f38-88fc-ac8b49b420be" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <TestLinks>
    <TestLink id="d0380f08-e99f-ebae-e5cd-9ae8196521cb" name="initialize" storage="bin\debug\unittestproject1.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <TestLink id="5b688acc-bf10-4c7e-4b60-69d8596bdd90" name="TestMethod1" storage="bin\debug\unittestproject1.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <TestLink id="0c248cf5-fa4f-6c24-b151-3ffdbae30f10" name="it_should_be_able_to_add_a_new_blog" storage="bin\debug\unittestproject1.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </TestLinks>
</OrderedTest>

顺便说一句,测试效果很好……但是……

由于某种原因,我的测试运行了两次

所以我在每个测试上都有一个断点,当我单击 Test |调试 |所有测试即使AssemblyInitialize 方法执行了两次,测试也会执行两次 =(

更新 1

我刚刚发现测试是在我TestResults文件夹下的两个不同文件夹中创建的,相差1秒

下图中的名字只是我的网络用户名

我的配置中缺少什么?

【问题讨论】:

    标签: c# visual-studio unit-testing visual-studio-2012 mstest


    【解决方案1】:

    由于某种原因,我的测试运行了两次

    您的测试运行两次,因为它们作为简单单元测试和有序测试的一部分运行。

    甚至AssemblyInitialize方法都执行了两次

    如果您打开bin\debug 文件夹,您将看到您的orderedtest 以orderedtest1.orderedtest 的形式包含在其中。您已经打开它,所以您看到它是一个简单的 xml 文件。此文件未编译到程序集中。

    当 Visual Studio 开始执行您的测试时,它首先选择单元测试。因此,它初始化它们包含的程序集。当它们完成时,它不知道有序测试包含来自同一程序集的测试,因此执行AssemblyCleanup。当它开始执行有序测试时,它必须重新初始化程序集以测试其中包含的单元测试。

    【讨论】:

      【解决方案2】:

      这是因为您的 Ordered Test 本身就是一个测试,因此运行所有测试意味着所有单独的测试都会像 Ordered 测试一样运行,因此其中包含的那些测试将运行两次。

      您可以使用测试列表编辑器有选择地运行测试(Test\Windows\Test List Editor)。

      【讨论】:

      • 有道理,但我不想运行我的测试两次。我不知道我的 CI 服务器会发生什么。除了这真的很奇怪,因为我的 AssemblyInitialixe 方法运行了两次,这个方法应该在每个测试程序集中运行一次。我想我缺少一些配置
      • 我不认为您缺少任何配置 - 运行所有测试就是这样做的。使用测试列表编辑器仅运行您订购的测试。
      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 2014-09-16
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多