【问题标题】:Exception whilst running all unit tests at the same time同时运行所有单元测试时出现异常
【发布时间】:2011-11-02 22:29:38
【问题描述】:

我在单元测试类中有一堆单元测试。

当我单独运行每个时,它们都通过了,但是当我同时运行它们时,第一个通过,其余的失败:

System.ArgumentException: 具有相同键的项目已经被 添加了

谁能告诉我为什么?以及我需要如何纠正错误?

示例:

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

    #region Additional test attributes
    #endregion

    /// <summary>
    ///A test for SplitTdsName
    ///</summary>
    [TestMethod()]
    public void SplitTdsNameTest_SimpleValidName1()
    {            
        string tdsName = "Mr Daniel Trunley";
        MemberName expected = new MemberName("Mr", "Daniel", "Trunley");
        MemberName actual;
        actual = TdsTransformer.SplitTdsName(tdsName);
        Assert.AreEqual(expected, actual);            
    }

    /// <summary>
    ///A test for SplitTdsName
    ///</summary>
    [TestMethod()]
    public void SplitTdsNameTest_SimpleValidName2()
    {
        string tdsName = "Mr Daniel George Trunley";
        MemberName expected = new MemberName("Mr", "Daniel George", "Trunley");
        MemberName actual;
        actual = TdsTransformer.SplitTdsName(tdsName);
        Assert.AreEqual(expected, actual);
    }

    [TestMethod()]
    public void SplitTdsNameTest_SimpleValidName3()
    {
        string tdsName = "Daniel George Trunley";
        MemberName expected = new MemberName("", "", "Daniel George Trunley");
        MemberName actual;
        actual = TdsTransformer.SplitTdsName(tdsName);
        Assert.AreEqual(expected, actual);
    }

其余的测试都是同一类型。

【问题讨论】:

  • 你没有任何 TestInitialize 属性方法吗?
  • @fauxtrot 不,我不知道,我对 UnitTesting 比较陌生?

标签: c# .net unit-testing vs-unit-testing-framework


【解决方案1】:

您的测试不遵循独立原则,因此一项测试不应影响其他测试。

查看您提供的代码,我可以假设问题是 TdsTransformer.SplitTdsName() 缓存一些数据。我建议清理所有共享变量:

[TestCleanup()]
public void Cleanup()
{
   // cleanup all shared variables     
}

有用的链接:

【讨论】:

  • 我对单元测试比较陌生,我不知道我会在这个清理方法中放什么?
  • @user1016253 : 我相信 TdsTransformer.SplitTdsName() 更新了 TdsTransformer 类的一些静态字段/属性,对吗?
  • @sll 1+ 获得 10k 声望 :)
  • 这个答案实际上帮助了我。在我的测试方法下,主窗体被初始化以调用公共方法主题进行测试。在主窗体的初始化分支下有一些代码分支到其他类的方法,我意识到我的同行引入了一些静态变量。我不知道在 Cleanup 方法下要包含什么,因为这些静态变量是另一个类的内部变量,但是我跳过了在主窗体初始化时为我的单元测试 (WinForms) 进行的调用的静态变量初始化。
猜你喜欢
  • 2012-03-02
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 2013-09-22
  • 2013-01-20
  • 2016-05-06
  • 2018-08-21
  • 1970-01-01
相关资源
最近更新 更多