2011-11-02 90 views
1

我该如何为这些[TestMethod()]写[TestCleanup()]方法。TestCleanup()Implementation

我有以下的11:

当单独运行它们通过,当在同一时间所述第一不运行经过

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

成员名称:

public struct MemberName 
{ 
    public string Title; 
    public string FirstNames; 
    public string LastNames; 

    public MemberName(string title, string firstNames, string lastNames)    
    {    
     Title = title; 
     FirstNames = firstNames; 
     LastNames = lastNames; 
    } 
} 

SplitTds:

public MemberName SplitTdsName(string tdsName) 
    { 
     return NameSplitter.Splitter(tdsName); 
    } 

分配器:

public static MemberName Splitter(string fullName) 
    { 
     nameInFull = fullName; 
     SetAllowedTitles(); 
     SplitNamesAndRemovePeriods(); 
     SetTitles(); 
     MemberName splitName = new MemberName(titles, firstNames, lastNames); 
     return splitName; 
    } 
+0

'TdsTransformer',是一个*实例*或类引用(所以是'SplitTdsName一个静态或实例方法)? “SplitTdsName”持有旧数据吗? 'MemberName'里面是否提供了适当的平等实现?给你的编辑是不够的。 –

+0

@AnthonyPegram是否足够的信息?还是需要更多? – ediblecode

+0

我同意奥斯汀的回答,我很担心静态方法和涉及的全局状态。我也担心结构,它的可变性等。我认为你应该重新访问你的设计。 –

回答

4

根据提供的内容,它看起来不像任何清理是必要的。

如果有一个TestInitialize方法,只需取消那里做了什么。

如果TdsTransformer.SplitTdsName存储任何内部状态,您也必须清除该状态。虽然如果它确实,它可能不应该是一个静态的方法。

基础上编辑,这两种方法让我担心:

SetAllowedTitles(); 
    SetTitles(); 

他们暗示有内部状态,这在我看来,是一个静态类非常糟糕。这可能是连续测试未通过时所看到的问题。

要纠正这些保持静态,让他们返回,而不是在静态成员存储的值:

var allowedTitles = SetAllowedTitles(fullName); 
    var names = SplitNamesAndRemovePeriods(fullName); //likely a struct or class with first/last names 
    var titles = SetTitles(allowedTitles);