也许这个问题听起来有些奇怪,但我正在尝试解决的问题是...首先,请记住我更多是一名Java开发人员,正在逐渐习惯使用PHP,所以也许我的思维过程是问题所在!
我正在测试一个用Symfony构建的网站。对于我的组件测试,我创建了一个扩展
你明白了吧。我接下来的想法是将所有这些“复杂断言”重构到其他类中,可能遵循页面对象模式,但是其他类将无法访问
那么有没有一种简单的方法可以访问
我正在测试一个用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) ...
你明白了吧。我接下来的想法是将所有这些“复杂断言”重构到其他类中,可能遵循页面对象模式,但是其他类将无法访问
assertEquals
方法,除非这些其他类也扩展了WebTestCase
或至少PHPUnit_Framework_TestCase
,这似乎不是一个很好的主意...那么有没有一种简单的方法可以访问
assertEquals
方法(及相关内容)而不必扩展基本的PHPUnit类?我能用组合来实现吗?