Open20
ミューテーションテスト導入まで
composer require --dev infection/infectionでインストールしてみる
allow-plugins どうこうみたいな何か聞かれるけど、よくわからないからyesにした
./vendor/bin/infection --filter=<ファイル名>
で実行した見たらエラーになった。
既存テストが落ちてる??
もう一回実行したらエラー内容が変わった
xdebugをphp.iniに登録する必要があるらしい
php.iniどこにあるかわからんから調べる
> php --ini
Cannot load Xdebug - it was already loaded
Configuration File (php.ini) Path: /opt/homebrew/etc/php/8.3
Loaded Configuration File: /opt/homebrew/etc/php/8.3/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/8.3/conf.d
Additional .ini files parsed: /opt/homebrew/etc/php/8.3/conf.d/ext-opcache.ini
追記した
zend_extension=xdebug
xdebug有効か確認するためにphp -v
実行するが、xdebug.so見つからないって怒られる
pecl パッケージアップグレードしたらxdebug有効になった
pecl upgrade
infection再度実行した
[ERROR] Project tests must be in a passing state before running Infection.
Infection runs the test suite in a RANDOM order. Make sure your tests do not have hidden dependencies.
phpunit.xmlに
executionOrder="random" resolveDependencies="true"
追加してみる
そもそもstderr出てた
STDERR:
Cannot load Xdebug - it was already loaded
xdebug重複してロードされてるっぽいので、php.iniに追記した下記を消す
zend_extension=xdebug
もう一回php -v
したらエラー出てなかった
では改めてinfection実行
./vendor/bin/infection --filter=XXXXXXX
ってやったのに全ファイルテストされた
ドキュメント貼っとく
filterでテストファイルと実ファイルの指定で動き変わる。
実ファイルだと実行範囲少ない。なぜ?
実ファイルで少なかったのエラーになったからか
jsonファイル消してもう一回テスト実行したら任意のファイルだけテストできた。
とおもったけど、無理やりphpファイル消してたからだった・・・
./vendor/bin/infection -j4 --filter=<file name>
{
"$schema": "vendor/infection/infection/resources/schema.json",
"source": {
"directories": [
"app",
"database/factories",
"database/seeders"
]
},
"logs": {
"text": "infection.log",
"html": "infection.html"
},
"mutators": {
"@default": true
}
}