public class Test1: BaseTestSa ne uitam acuma la clasa de baza:
{
[TestMethod]
public void Method1Test()
{
Console.WriteLine("Method1Test");
}
[TestInitialize]
public void TestInit()
{
Console.WriteLine("TestInitialize");
}
[TestCleanup]
public void TestCleanup()
{
Console.WriteLine("TestCleanup");
}
[ClassInitialize]
public static void ClassInit(TestContext testContext)
{
Console.WriteLine("ClassInit");
}
}
public class BaseTest{Totul pare in regula, in mod normal la rularea testului va asteptati sa ruleze in felul urmator:
[TestInitialize]
public void BaseTestInit()
{
Console.WriteLine("BaseTestInitialize");
}
[TestCleanup]
public void BaseTestCleanup()
{
Console.WriteLine("BaseTestCleanup");
}
[ClassInitialize]
public static void BaseClassInit(TestContext testContext)
{
Console.WriteLine("BaseClassInit");
}
}
- BaseClassInit
- ClassInit
- BaseTestInit
- TestInit
- Method1Test
- TestCleanup
- ClassInit
- BaseTestInit
- TestInit
- Method1Test
- TestCleanup
La aceasta problema eu am văzut 3 posibile soluții, de la caz la caz ele pot sa fie aplicate sau nu:
- clasa de teste care mosteneste clasa de baza sa apeleze explicit BaseClassInit. Dar acest lucru ne obliga avem o metoda decorata cu ClassInitialize in fiecare clasa derivata (poate nu ne dorim acest lucru);
- in unele situații, putem sa mutam logica din BaseClassInit în constructorul static:
3. prin reflection putem sa facem un hook si sa ne implementam noi acest mecanism. Dar este destul de complex si nu cred ca merita;static BaseTest()
{
Console.WriteLine("BaseClassInit");
}
Din fericire avem cateva solutii la indemana, dar uneori dupa o refactorizare ne putem trezi ca ne cad testele si sa nu gasim cauza exacta.
0 comments:
Post a Comment