MS Test v2 a ClassInitialize

Ahojte,
riesim takyto problem v testoch.

mam nejake DataTestMethod-y, ktore potrebuju vytvorene ste datove struktury, ktore sa vytvaraju pomocou testovacej kniznice. No ich vytvorenie trva isty cas (povedzme 500ms az sekundu/dve), tak som chcel tuto operaciu presunut do ClassInitialize metody, lebo testovacych casov mam desiatky a dana struktura je imuutable.

Ako ID-cko preniest z metody ClassInitialize do testovacich metod?

Skusal som TestContext.Properties, no to prenieslo dane ID, len do prvej volanej test metody.

Ake IDcko potrebujes preniest?

Nieje to nahodou tak, ze pri sa kazdom teste vytvori nova instancia, ale Class Initialize sa zavola iba raz?

Ak potrebujes cachovanie medzy testami, tak si vytvor staticky propertu na classe

Ake IDcko potrebujes preniest?

Generujem si privatny kluc, co moze trvat dlho. Tak jeho ID-cko.

Nieje to nahodou tak, ze pri sa kazdom teste vytvori nova instancia, ale Class Initialize sa zavola iba raz?

Ano, Je to tak.

Ak potrebujes cachovanie medzy testami, tak si vytvor staticky propertu na classe

To ma napadlo, ale neprislo mi to ako ciste rienie a cakal som, ze to pojde preniest cez TestContext.

Nakoniec som zistl, ze v XUnit to ide spravit cez Dispozable test fixture.
Ale zostal som pri MS Test, lebo sa mi nechcelo prepisaovat vsteky integracne testy a ich spustenie netrva az tak dlho ako som cakal.

Ciste to nieje preto, ze zdielat stav medzi testami nieje ciste :slight_smile: Ak chces zdielat stav, toto je uplne v poriadku - je to transparentne.

Raz som to riesil cez base classu, ktora tento shareovany stav interne davala do statickej property a v ClassCleanup ho potom aj vycistila.

private static IReadonlyDictionary<string, object> _sharedState;
protected IReadonlyDictionary<string, object> SharedState => _sharedState;

[ClassInitialize]
void ClassInitialize()
{
     _sharedState = new ReadOnlyDictionary(CreateState());
}

[ClassCleanup]
void ClassCleanup()
{
     _sharedState = null;
}
protected abstract Dictionary<string, object> CreateSharedState();

Takyto pohlad beriem, a aj v podstate vyvstluje preco treba pouzit statiku.