PHPUnit数据提供程序动态创建

时间:2015-08-12 07:50:48

标签: php phpunit automated-tests

我对PHPUnit数据提供程序有一个非常有趣的问题。

$("#qtyok").click(function () {
    var id = $("#menuid").val();
    var qty = $("#qtybox").val();
    if (qty != '') {
        $("#loaderz").show();
        $.post("fm_valuemenuload.php", {
                id: id,
                qty: qty

            },
            function (data, status) {
                $("#loaderz").hide();
                $("#modalQty").modal('hide');
                $("#message").html('Added');
                document.getElementById('quantity').innerHTML = qty;
                price += data * qty;
                $("#newprice").val(price.toFixed(2));
                $("#modalSUCCESS").modal('show');
                setTimeout(func1, 3000);

            });
    }
});

我使用protected $controller; protected function setUp() { $this->controller = new ProductController(); } /** * @covers ProductsController::createItem * @dataProvider getTestDataProvider * @param number $name */ public function testCreateItem($name) { $prod = $this->controller->createItem($name); $id = $prod->getId; $this->assertInternalType('int', $id); $this->assertInstanceOf('Product', $prod); } /** * @covers ProductsController::getItemInfo * @depends testCreateItem * @param number $id */ public function testGetItemInfo($id) { $info = $this->controller->getItemInfo($id); $this->assertArrayHasKey('id',$info); $this->assertEquals($id, $info['id']); } 从CSV文件中获取测试数据。然后getTestDataProvider从CSV行创建10个新产品。

如何创建testCreateItem个新产品数组并将其用作$id的数据提供者?我无法将其存储在SESSION或文件中,因为提供程序函数在SetUp之前运行。

也许某人已经遇到过类似的问题了?

1 个答案:

答案 0 :(得分:0)

我只对静态字段有所了解(也许不是最好的,但如果有人有更好的我会看)。

private static $ids;

/**
 * @dataProvider some
 */
public function testT1($id)
{
    self::$ids[] = $id;
}

/**
 * @depends testT1
 */
public function testT2()
{
    var_dump(self::$ids);
}

public function some()
{
    return [
        [1],
        [2],
        [3]
    ];
}

您必须记住,该字段在所有类中都可见,因此如果您想使用其他数据集,则必须使该字段无效。