Diskuze: Unit testy ve Visual Studiu 2012

C# .NET .NET (C# a Visual Basic) Unit testy ve Visual Studiu 2012 American English version English version

Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Dobrý den,
mám problém s vytvořením testů ve Visual Studiu 2012. Vytvořím unit test project, přidám jiný project jako reference, použiji patřičný namespace. Ale poté nastává problém s použitím kódu z druhého projektu. Vůbec mi to nechce načíst třídy z toho druhého projektu. Jediné dvě řešení, na které jsem přišel, byly buď vytvořit testovní project ve stejném namespace nebo nechat třídy jako veřejné.
Vím že ve VS2010 to šlo nějak s povolením Deploymentem, ale ve VS2012 to nemůžu najít. Nebo je to řešení (pravděpodobně spíš to s namespace) čisté?
Děkuji za odpovědi.

Odpovědět 2.7.2014 12:04
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na patrik.valkovic
Jan Vargovský:

Všechno co chceš vystavit mimo assembly musí být public. Když chceš testovat metody, které nejsou public, tak pak stačí tento kód:

ClassX classX = new ClassX();
var method = classX.GetType().GetMethod("name of method");
method.Invoke(classX, new object[] {"some parameters", 5, DateTime.Now, ...})

Pozn. třída jako taková

class A
{
...
}

Má defaultně modifikátor přístupu internal, to je takový private, ale mezi projektama.

Jinak internal třídy potřebují tohle

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("UnitTestProject1")]
Editováno 2.7.2014 14:46
 
Nahoru Odpovědět  +1 2.7.2014 14:40
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na patrik.valkovic
Jan Vargovský:

Ještě jsem našel tohle, což je asi z hlediska syntaxe jednodušší:

PrivateObject p = new PrivateObject(typeof(ClassX));
p.Invoke("name of method", "some parameters", 5, DateTime.Now, ...);

Nebo minimálně je tam už params, ale to teď nevím od jaké verze .NETu je.

Editováno 2.7.2014 15:04
 
Nahoru Odpovědět 2.7.2014 15:04
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Takže to vypadá že bude jednodušší to hodit do stejného namespace a nebude se tím prasit kod ;-)

Nahoru Odpovědět 2.7.2014 16:15
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na patrik.valkovic
Jan Vargovský:

Tak tohle je potřeba jen na private metody. Jestli chceš testovat internal třídy, tak stačí zveřejnit namespace pomocí toho atributu.

Teď moc právě nechápu, jestli chceš testovat internal třídy a nebo private metody.

Btw, soukromé metody jsou většinou volány něčím co je veřejné, takže stačí psát unit testy na ty veřejné metody a tím otestuješ i chování těch soukromých.

 
Nahoru Odpovědět 2.7.2014 17:27
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Jan Vargovský
patrik.valkovic:

Jo už mě to funguje :) Nevěděl jsem kam mám dat to assembly, už to mám správně ;-)
Díky, tohle jsem ptořeboval :) Už to šlape jak má :)
Díky moc :)

Nahoru Odpovědět 2.7.2014 17:59
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.