您的课程将为 images() 返回一个字符串,这不是您真正测试的内容。
class WebsiteHasImage{
public function images(){
$website = 'http://somedomain.com/images/img.jpg';
return $website;
}
}
class WebsiteHasImageTest extends PHPUnit_Framework_TestCase
{
public function testSuccess()
{
WebSiteImage = new WebSiteHasImage();
$this->assertEquals('http://somedomain.com/images/img.jpg', $WebSiteImage->images(), 'Check returned File Name is correct');
}
}
这一切所做的就是测试图像字符串是否正确。
您可以尝试通过另一个调用读取图像,然后进行比较,但这需要您的网站已启动。
或者,该调用可以查看当前应用程序目录中的 images/img.jpg 并进行一些测试(字节大小是否合适,等等...)来验证图像。
您可以尝试阅读网站并返回内容,但同样需要网站。因此,为了测试您的代码,您有一个返回网站数据的类,然后模拟该类以返回一个固定的字符串,然后您将针对该类编写测试以查看您的类中的代码是否正确提取图像。然后,您的类可以测试图像是否存在,并再次模拟它以始终返回它来测试您的代码的作用。
public function GetWebPageContents($HTTPAddress)
{
$HTML = ... // Code that reads the contents
return $HTML;
}
public function GetImageList($HTML)
{
$ImageList = array();
... // Code to find all images, adding to ImageList
return $ImageList;
}
测试类添加
public function testGetWebPageContents()
{
$HTMLText = '<html><body><img scr=""></img></body><</html>'; // Fill this with a sample webpage text
$MockClass = $this->getMock('WebsiteHasImage', array('GetWebPageContents'));
// Set up the expectation for the GetWebPageContents() method
$MockClass->expects($this->any())
->method('GetWebPageContents')
->will($this->returnValue($HMTLText));
// Create Test Object
$TestClass = new MockClass();
$this->assertEquals($HTMLText, $TestClass->GetWebPageContents('http://testaddress.com'), 'Validate Mock HTML return'); // Address is garbage as it does not matter since we mocked it
$WebsiteTest = new WebsiteHasImage();
$ImageList = $WebsiteTest->GetImageList($HTMLText);
$this->assertEquals(1, count($ImageList), 'Count Total Number of Images');
$this->assertEquals('images/img.jpg', $ImageList[0], 'Check actual image file name from dummy HTML parsing');
... // More tests for contents
}
现在,最好的改变是在您的类中使用读取的数据,为此,您可以在从网站读取 HTML 代码后正常将其传递给类。在您的测试中,您将使用构造函数中的 Mock 对象或通过 Set 传递执行读取的对象。在 Google 上搜索 Dependency Injection、Mock Objects 等...以查找有关此主题的更多信息。