Open20

ミューテーションテスト導入まで

zatsuyooozatsuyooo

composer require --dev infection/infectionでインストールしてみる

zatsuyooozatsuyooo

allow-plugins どうこうみたいな何か聞かれるけど、よくわからないからyesにした

zatsuyooozatsuyooo

./vendor/bin/infection --filter=<ファイル名>
で実行した見たらエラーになった。
既存テストが落ちてる??

zatsuyooozatsuyooo

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
zatsuyooozatsuyooo

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.  
zatsuyooozatsuyooo

phpunit.xmlに

executionOrder="random" resolveDependencies="true"

追加してみる

zatsuyooozatsuyooo

そもそもstderr出てた

         STDERR:                                                                                                        
         Cannot load Xdebug - it was already loaded  
zatsuyooozatsuyooo

xdebug重複してロードされてるっぽいので、php.iniに追記した下記を消す

zend_extension=xdebug
zatsuyooozatsuyooo

./vendor/bin/infection --filter=XXXXXXXってやったのに全ファイルテストされた

zatsuyooozatsuyooo

filterでテストファイルと実ファイルの指定で動き変わる。
実ファイルだと実行範囲少ない。なぜ?

zatsuyooozatsuyooo

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
    }
}