0

いくつかのxmlを解析するクラスのメソッドがあります。タグ<status>failure</ status>が見つかった場合は、例外を返します。

status=failureのときにこのメソッドが例外を返すことを確認する単体テストを作成したいと思います。

今のところ、phpunitMOCKINGを使用してそれを実行できませんか?

例:

<?php
$mock = $this->getMock('Service_Order_Http', array('getResponse'));
        $mock->expects($this->any())
            ->method('getResponse')
            ->will($this->throwException(new Exception()));

        $e = null;
        try {
            $mock->getResponse();
        } catch (Exception $e) {

        }
        $this->assertTrue($e instanceof Exception, "Method getResponse should have thrown an exception");

//phpunit sends back: PHPUnit_Framework_ExpectationFailedException : Failed asserting that exception of type "Exception" is thrown.
?>

ご協力いただきありがとうございます

4

1 に答える 1

4

単体テストでのモックの目的を誤解していると思います。

モックは、実際にテストしようとしているクラスの依存関係を置き換えるために使用されます。

これはおそらく一読の価値があります:オブジェクト モッキングとは何ですか? また、いつ必要になりますか?

実際には、テストでこれらの行に沿って何かを探していると思います:

<?php

    // This is a class that Service_Order_Http depends on.
    // Since we don't want to test the implementation of this class
    // we create a mock of it.
    $dependencyMock = $this->getMock('Dependency_Class');

    // Create an instance of the Service_Order_Http class,
    // passing in the dependency to the constructor (dependency injection).
    $serviceOrderHttp = new Service_Order_Http($dependencyMock);

    // Create or load in some sample XML to test with 
    // that contains the tag you're concerned with
    $sampleXml = "<xml><status>failure</status></xml>";

    // Give the sample XML to $serviceOrderHttp, however that's done
    $serviceOrderHttp->setSource($sampleXml);

    // Set the expectation of the exception
    $this->setExpectedException('Exception');

    // Run the getResponse method.
    // Your test will fail if it doesn't throw
    // the exception.
    $serviceOrderHttp->getResponse();

?>
于 2013-03-20T10:29:56.283 に答える