作者:辛集小怪兽_603 | 来源:互联网 | 2023-05-25 12:29
也许这个问题很奇怪,但这是我要解决的问题......首先,请记住,我更像是一个习惯使用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
,似乎不是一个好主意......
那么有一种简单的方法来访问assertEquals
方法(和相关的),而无需扩展基础PHPUnit类?我可以用某种方式使用作文吗?
1> Sebastian Be..:
PHPUnit的内置断言在PHPUnit_Framework_Assert
类中实现为公共静态方法.PHPUnit_Framework_Assert::assertTrue()
例如,只需调用它们即可.