gpt4 book ai didi

php - 是否可以在不扩展 PHPUnit_Framework_TestCase 的情况下使用 PHPUnit 断言?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:56:35 26 4
gpt4 key购买 nike

也许这个问题看起来很奇怪,但这是我要解决的问题...首先,请记住我更像是一个习惯使用 PHP 的 Java 开发人员,所以也许我的思维过程有问题!

我正在测试我用 Symfony 构建的网站。对于我的组件测试,我创建了扩展 WebTestCase 的测试类,我的测试有一组如下所示的断言来验证页面标题是否在我想要的位置并包含我期望的内容:

$text = "Page Title";
$selector = "h2#pageHeading";
$this->assertEquals(1, $crawler->filter($selector)->count(), "Found wrong number of elements using selector ".$selector);
$this->assertEquals(trim($text),
trim($crawler->filter($selector)->text()),
"Element $selector didn't have expected text");

然后我为站点内的其他页面编写了更多测试,在所有这些页面中我都想测试标题是否存在,所以为了能够重用代码,我将上面的代码重构为父类中的一个函数其他测试类重用:

function assertPageTitle($text) {
$selector = "h2#pageHeading";
$this->assertEquals(1, $crawler->filter($selector)->count(), "Found wrong number of elements using selector ".$selector);
$this->assertEquals(trim($text),
trim($crawler->filter($selector)->text()),
"Element $selector didn't have expected text");
}

我在测试中调用了那个方法。随着测试的发展,我可以重构更多类似的“复杂断言”,并且所有这些都转到父类,从而使我的父类膨胀到一个巨大的断言容器中:

protected function assertSelectedOptionContainsTextValue($selector, $text, $value, $crawler) {
...
}

protected function assertMenusContainItems($menus, $crawler) {
...
}

protected function assertErrorMessageShown($message, $crawler) {
...
}

... (more and more) ...

你明白了。此时我的下一个想法是将所有这些“复杂断言”重构到其他类中,可能遵循 Page Object模式,但其他类将无法访问 assertEquals 方法,除非其他类也扩展 WebTestCase 或至少扩展 PHPUnit_Framework_TestCase,这这似乎不是一个好主意......

那么有没有一种无需扩展 PHPUnit 基类即可访问 assertEquals 方法(及相关方法)的简便方法?我能以某种方式使用组合吗?

最佳答案

PHPUnit 的内置断言在 PHPUnit_Framework_Assert 类中作为公共(public)静态方法实现。例如,只需将它们调用为 PHPUnit_Framework_Assert::assertTrue()

关于php - 是否可以在不扩展 PHPUnit_Framework_TestCase 的情况下使用 PHPUnit 断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28115744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com