Estoy configurando algunas pruebas de unidad basadas en MSTest. Para hacer mi vida más fácil, quiero usar una clase base que maneje la configuración genérica y la tara que requieren todas mis pruebas. Mi clase base es el siguiente:Uso de herencia en MSTest
[TestClass]
public class DBTestBase {
public TestContext TestContext { get; set; }
[ClassInitialize()]
public static void MyClassInitialize(TestContext testContext) {
var config = new XmlConfigurationSource("ARconfig_test.xml");
ActiveRecordStarter.Initialize(Assembly.Load("LocalModels"), config);
}
[TestInitialize()]
public void MyTestInitialize() {
ActiveRecordStarter.CreateSchema();
Before_each_test();
}
protected virtual void Before_each_test() { }
[TestCleanup()]
public void MyTestCleanup() {
After_each_test();
}
protected virtual void After_each_test() { }
}
mi clase de prueba real se ve así:
[TestClass]
public class question_tests : DBTestBase {
private void CreateInitialData() {
var question = new Question()
{
Name = "Test Question",
Description = "This is a simple test question"
};
question.Create();
}
protected override void Before_each_test() {
base.Before_each_test();
CreateInitialData();
}
[TestMethod]
public void test_fetching() {
var q = Question.FindAll();
Assert.AreEqual("Test Question", q[0].Name, "Incorrect name.");
}
}
La función TestInitialize funciona como se esperaba. Pero la función ClassInitialize nunca se ejecuta. Que se ejecuta si añado lo siguiente para mi clase de niño:
[ClassInitialize()]
public static void t(TestContext testContext) {
MyClassInitialize(testContext);
}
¿Es posible conseguir mi clase base para ejecutar la función sin hacer referencia a que en mi clase hija inicializar?
Demasiado hacky como respuesta: intente utilizar un constructor estático en la clase base. – roufamatic
Terminé usando AssemblyInitialize(). No es exactamente lo que quería, pero supongo que MSTest no lo hace. @Roufamatic, su respuesta probablemente sea la única. Si lo publicas, lo aceptaré. – oillio