Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Patrik Valkovič:2.7.2014 12:04

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ý
Tvůrce
Avatar
Odpovídá na Patrik Valkovič
Jan Vargovský:2.7.2014 14:40

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
2.7.2014 14:40
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Patrik Valkovič
Jan Vargovský:2.7.2014 15:04

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 Valkovič:2.7.2014 16:15

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ý
Tvůrce
Avatar
Odpovídá na Patrik Valkovič
Jan Vargovský:2.7.2014 17:27

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
Odpovídá na Jan Vargovský
Patrik Valkovič:2.7.2014 17:59

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.