2011-11-02 81 views
1

我在单元测试类中有一堆单元测试。同时运行所有单元测试的异常

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

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); 
    } 

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

+0

你没有任何TestInitialize归因方法,你呢? –

+0

@fauxtrot不,我不是,我对UnitTesting比较陌生吗? – ediblecode

回答

7

您的测试不遵循独立原理,所以一个测试不应该影响其他测试。

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

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

相关链接:

+0

我对单元测试比较陌生,我不知道我在这个清理方法里面放了什么? – ediblecode

+1

@ user1016253:我相信TdsTransformer.SplitTdsName()会更新TdsTransformer类的一些静态字段/属性,对吧? – sll

+1

@sll 1+为10k的声誉:) – Damith

相关问题