2010-10-19 3 views
1

Как сделать базовый класс с помощью [TestClass()], где я буду делать MyClassInitialize(), а после этого я просто сделаю свои другие тестовые классы именно так: MyNewTest: BaseTest и там будет нет инициализации?Unit Tests inheritance

+2

Кажется, вы используете C# (и NUnit?) - уточните. –

+1

Я бы поставил под сомнение мотивы такого движения. Модульные тесты должны быть недолговечными и * простыми *. Если вы скрываете инициализацию, существует вероятность, что они будут хрупкими и трудными в обслуживании. – Kane

ответ

3

(с использованием MSTest)

ClassInitialize не будет работать на базовом классе. Кажется, что этот атрибут выполняется только для исполняемого тестового класса. Однако вы можете явно вызвать базовый класс.

Вот пример:

[TestClass] 
public class MyTestClass : TestBase 
{ 
    [TestMethod] 
    public void MyTestMethod() 
    { 
     System.Diagnostics.Debug.WriteLine("MyTestMethod"); 
    } 

    [ClassInitialize] 
    public new static void MyClassInitialize(TestContext context) 
    { 
     TestBase.MyClassInitialize(context); 
    } 
} 

[TestClass] 
public abstract class TestBase 
{ 
    public TestContext TestContext { get; set; } 

    public static void MyClassInitialize(TestContext context) 
    { 
     System.Diagnostics.Debug.WriteLine("MyClassInitialize"); 
    } 

    [AssemblyInitialize] 
    public static void AssemblyInit(TestContext context) 
    { 
    } 
} 
1

В NUnit/MbUnit вы просто применяете методы Initalize/Cleanup с соответствующими атрибутами в базовом классе, а затем наследуете их.

Я еще не пробовал это с MSTest, но я бы не рекомендовал эту структуру в любом случае.

Томас