Атрибуты C # не должны наследоваться - PullRequest
2 голосов
/ 06 января 2011

Поскольку атрибуты не наследуются в C # (по крайней мере, я не думал, что они это сделали) - как следующий код по-прежнему отображает всплывающее окно Hello при запуске теста MyTestMethod:

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

Ответы [ 2 ]

4 голосов
/ 06 января 2011

Атрибуты наследуются по умолчанию, но это можно отключить - см. AttributeUsage.Inherited

Если вы украсили определение атрибута атрибутом AttributeUsage, вы можете установить это свойство:

[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public class MyAttribute : Attribute
{
}
0 голосов
/ 06 января 2011

Если не работает как есть, то сделать метод Foo виртуальным и просто переопределить его и поместить TestInitialize в ваш метод переопределения TestClass

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