エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです!

【思考メモ】自動テストの目的・意味の違い?【682日目】

思考メモ

ちょっと雑に思ったのをこちらに書き写した感じなので、上手くまとまってないかもですm( )m

外部の関数と引数、どちらに注目する?

(あえてdataProvidor使わず書きました)

function testA()
{
    Mockery::shouldRecieve('aaa')->andReturn('a');
    ....
}

function testB()
{
    Mockery::shouldRecieve('aaa')->andReturn('b');
    ....
}

function testC()
{
    Mockery::shouldRecieve('aaa')->andReturn('c');
    ....
}

これと、

function testA()
{
    $param = 'x'
    Mockery::shouldRecieve('aaa')->with('x')->andReturn('a');
    Mockery::shouldRecieve('aaa')->with('y')->andReturn('b');
    Mockery::shouldRecieve('aaa')->with('z')->andReturn('c');
    ....
}

function testB()
{
    $param = 'y'
    Mockery::shouldRecieve('aaa')->with('x')->andReturn('a');
    Mockery::shouldRecieve('aaa')->with('y')->andReturn('b');
    Mockery::shouldRecieve('aaa')->with('z')->andReturn('c');
    ....
}

function testC()
{
    $param = 'z'
    Mockery::shouldRecieve('aaa')->with('x')->andReturn('a');
    Mockery::shouldRecieve('aaa')->with('y')->andReturn('b');
    Mockery::shouldRecieve('aaa')->with('z')->andReturn('c');
    ....
}

このテストの違い。

関数のテスト?引数依存???

前者は該当関数のreturn値に対するテスト。

後者はこのテストコードの引数に対するテスト。

inputに対して、outputが正しいことを自動テストがしていると考えるなら、
後者のほうが‘aaa’に対しては、より本質に近いのではφ(・

とはいえ、外部に環境が依存している、例えばDBやapiをモックする必要があったら、その時は前者が正しいのかもしれないφ(・