2011-01-05 19 views
0

Da Attribute in C# erben nicht (zumindest habe ich nicht, dass sie es taten) - wie funktioniert der folgende Code immer noch das Popup Hallo anzuzeigen, wenn der MyTestMethod Test wird durchgeführt:C# Attribute nicht vererben sollen

[TestClass] 
public class BaseTestClass { 
    [TestInitialize] 
    public void Foo() { 
     System.Windows.Forms.MessageBox.Show("Hello"); 
    } 
} 

[TestClass] 
public class TestClass : BaseTestClass { 
    [TestMethod] 
    public void MyTestMethod() { 
     Assert.IsTrue(true); 
    } 
} 
+0

sollte es nicht, es sei denn MyTestMethod ruft Foo, aber das hat nichts mit C# Attributen zu tun hat , die übrigens vererbt werden können. – Firoso

+0

Foo ist mit dem [TestInitialize] -Attribut ausgestattet, das vom TestClass-Test geerbt wird. Aber ja, wie bereits erwähnt, können Attribute vererbt werden. –

Antwort

3

Attribute werden standardmäßig geerbt, aber dies kann deaktiviert werden - AttributeUsage.Inherited

sehen Wenn Sie die Attributdefinition mit einem AttributeUsage Attribut schmücken, können Sie diese Eigenschaft festlegen können:

[AttributeUsage(AttributeTargets.Class, Inherited = false)] 
public class MyAttribute : Attribute 
{ 
} 
0

Wenn nicht als Arbeitszeit ist Methode Foo virtueller machen und es einfach zu überschreiben, und setzen Sie den TestInitialize an Ihrer Testclass Überschreibung Methode

[TestClass] 
    public class BaseTestClass 
    { 

    public virtual void Foo() 
    { 
     System.Windows.Forms.MessageBox.Show("Hello"); 
    } 
    } 

    [TestClass] 
    public class TestClass : BaseTestClass 
    { 
    [TestInitialize] 
    public override void Foo() 
    { 
     base.Foo(); 
    } 

    [TestMethod] 
    public void MyTestMethod() 
    { 
     Assert.IsTrue(true); 
    } 
    } 
+0

Danke - es funktioniert, ich habe es einfach nicht erwartet. Ich habe (ignorant) nicht gedacht, dass Attribute erben könnten. –