Nette\Tester privátní metody

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
grogy
Člen | 147
+
0
-

Ahoj,

je někde ukázka jak pomocí Nette\Tester co nejjednodušeji testovat privátní metody?

EDIT:// myšleno něco jednodušší než používat ručně reflexi

Editoval grogy (3. 7. 2013 16:37)

David Matějka
Moderator | 6445
+
0
-

v nette\tester to otestujes stejne jako jinde – nijak :) testovat by se melo verejne API.
pokud vsak na tom trvas, tak se bez reflexe neobejdes (nebo runkit, ale na ten bych nesahal uz vubec)

grogy
Člen | 147
+
0
-

Díky ;)

besanek
Člen | 128
+
0
-

Jak píše Matěj, když pokryješ celé veřejné API tak se ti pokryjí i všechny privátní metody. A pokud se nějaká nepokryje, rovnou smazat, protože se stejně nikde nikdy nevolá.

llook
Člen | 407
+
+1
-

My používáme tuhle knihovnu na zpřístupňování private/protected členů: https://github.com/PetrP/Access

Obecně ale jinak souhlas s matej21em, testy by měly pokrývat funkce veřejného rozhranní. Jestli ty veřejné metody pro svoji činnost volají další private/protected členy, to je jejich vnitřní uspořádání a po tom testům nic není. Pokud by ty další metody byly natolik komplexní, že by dávalo smysl je otestovat samy o sobě, tak asi patří vyčlenit a zpřístupnit.

grogy
Člen | 147
+
0
-

Díky za rady.

Teoreticky to celkově chápu, ovšem prakticky se v testech teprve cvičím. Nicméně jsem prošel celý kód, který potřebuji testovat a rozčlenil jsem jej do menších tříd. Ty nyní jdou otestovat velice pohodlně.

@llook díky za tip na knihovnu. Možná někdy použiji. Snad ale nebude třeba :)

David Grudl
Nette Core | 8218
+
0
-

V PHP 5.4:

Tester\Helpers::with($obj, function() {
	Assert::same( 123, $this->privateProperty );
});
Filip Procházka
Moderator | 4668
+
0
-

@grogy udělal jsi úplně to nejlepší co jsi mohl, velká pochvala! Privátní členy tříd se prostě netestují.

grogy
Člen | 147
+
0
-

@David Grudl Elegantní způsob. Díky :)

Kdyby někdo hledal, jak to přesně udělat, udělal jsem si demo. Stačí použít master větev Nette\Tester.

@Filip Procházka díky :)