Jump to content

Příručka:PHP jednotkové testování/pokrytí kódu

From mediawiki.org
This page is a translated version of the page Manual:PHP unit testing/Code coverage and the translation is 100% complete.
Pro pokrytí kódu hlavního kódu MediaWiki se podívejte na doc.wikimedia.org/cover.

Tato příručka vysvětluje, jak generovat pokrytí kódu na vaší lokální pracovní stanici. To může být užitečné pro pochopení fungování krytí a pro sledování pokroku vaší práce před odesláním změny Gerritu.

Ujistěte se, že máte:

  • Je instalován PHPUnit.
  • Nainstalovaný ovladač pro pokrytí kódu (doporučuje se pcov, ale lze použít i jiné ovladače, například Xdebug).

Spusťte následující skript:

# $ vendor/bin/phpunit --coverage-html docs/coverage [files]
# For example:
$ vendor/bin/phpunit --coverage-html docs/coverage tests/phpunit/unit/languages/LanguageTest.php

Zobrazení zpráv o pokrytí

Zprávy o pokrytí jádra MediaWiki, rozšíření a všech našich samostatných knihoven jsou pravidelně publikovány na platformě doc.wikimedia.org. (See the tutorial on how to add your extension to the list).

CoverMe nabízí alternativní pohled, třídí funkce podle toho, jak často jsou volány v produkčních projektech Wikimedie, a pomáhá identifikovat funkce, které by z dodatečného testování měly největší prospěch.

Rozsah pokrytí

Při spuštění PHPUnit na podmnožině souborů nebo podadresářů jsou testy mnohem rychlejší. Vytvoření zprávy o pokrytí však může stále trvat dlouho.

Změnou seznamu povolených filtrů v phpunit.xml tak, aby odpovídal rozsahu vašeho testovacího běhu, můžete generovat zprávy o pokrytí mnohem rychleji. Zkopírujte phpunit.xml.dist do phpunit.xml v kořenovém adresáři vašeho repozitáře a poté aktualizujte whitelist:

Například:

--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist

	<coverage includeUncoveredFiles="false">
		<include>
-			<directory suffix=".php">includes</directory>
-			<directory suffix=".php">languages</directory>
-			<directory suffix=".php">maintenance</directory>
-			<directory suffix=".php">extensions</directory>
-			<directory suffix=".php">skins</directory>
+			<directory suffix=".php">includes/libs</directory>
		</include>
		<exclude>
			<directory suffix=".php">languages/messages</directory>
			<directory suffix=".php">maintenance/benchmarks</directory>
			<directory suffix=".php">extensions/*/tests</directory>
			<directory suffix=".php">skins/*/tests</directory>
		</exclude>
	</coverage>

In case the relevant file(s) are in a large directly (e.g. /includes), you can also specify individual files:

--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
		<include>
-			<directory suffix=".php">includes/libs</directory>
+			<file>includes/includes/WebRequest.php</file>
		</include>

Pro rozšíření můžete k automatickému provedení použít skript pro skládání textu, který je součástí jádra MediaWiki:

Terminal

PhpStorm

V PhpStormu můžete použít možnost "Spustit {test} s pokrytím" a zprávu o pokrytí uvidíte přímo v editoru. Jak je definováno výše, nezapomeňte nejprve upravit seznam zahrnutého pokrytí v phpunit.xml, což povede k velmi rychlému vygenerování zprávy o pokrytí.

MediaWiki-Vagrant

$ vagrant ssh
$ cd /vagrant/mediawiki/tests/phpunit/
$ sudo -u www-data php phpunit.php --wiki wiki --coverage-html ../../docs/coverage includes/MessageTest.php

You can view the coverage report at http://dev.wiki.local.wmftest.net:8080/w/docs/coverage/.

Use a shortcut:

$ alias mwpun='sudo -u www-data php phpunit.php --wiki wiki'
$ mwpun --coverage-html ../../docs/coverage includes/MessageTest.php

You may get a permissions error about www-data being unable to write to this directory. In that case, try the following:

$ alias mwpun='sudo -u www-data php phpunit.php --wiki wiki'
$ sudo rm -rf /vagrant/mediawiki/docs/coverage /tmp/coverage
$ mwpun --coverage-html /tmp/coverage includes/MessageTest.php
$ sudo mv /tmp/coverage /vagrant/mediawiki/docs/coverage

mediawiki-docker-dev

you@host:mediawiki-docker-dev$ ./bash
root@container:/var/www/mediawiki# cd tests/phpunit/
root@container:phpunit# php phpunit.php --coverage-html ../../docs/coverage includes/MessageTest.php

View the coverage report at http://default.web.mw.localhost:8080/mediawiki/docs/coverage/.

See also