class Documentation
{
private $_text;
public function __construct($text)
{
$this->_text = $text;
}
public function generate()
{
return new \DOMElement('documentation', $this->_text);
}
}
我能想到的一个明显的解决方案是创建新的DOMDocument
,附加generate()
函数调用的结果,并使用$this->assertEqualXMLStructure
与预期的元素进行比较,但出于某种原因我不喜欢不喜欢它,我相信还有其他选择。
有什么想法吗?
UPD :好像我错过了一些重要的东西:我想确定的是返回具有特定内容的特定类型的元素。怎么做?
UPD 2 :
这是我目前可以创造的,但它很难看,不是吗?
public function testGenerate()
{
$expected = new \DOMDocument();
$expected->loadXML('<?xml version="1.0" encoding="utf-8"?><documentation>foo</documentation>');
$documentation = new Documentation('foo');
$actual = new \DOMDocument('1.0', 'utf-8');
$actual->appendChild($documentation->generate());
$this->assertEqualXMLStructure($expected, $actual);
}
答案 0 :(得分:5)
这是一个如此简单的课程,几乎没有任何可能出错的课程。代码中根本没有分支,并且所有方法都具有1的圈复杂度。实际上没有必要为这样一个简单的类编写测试套件。
但是,您可以使用PHPUnit断言generate()方法返回DOMElement对象,并且该元素的子节点是文本对象,并且文本对象与输入文本匹配。
真的没有太多意义。
编辑添加:这是进行测试的示例方法(假设PHPUnit为测试运行器)。它没有经过测试,因此语法可能有误,但它应该让您了解测试过程。
如您所见,此方法比正在测试的类长!我是单元测试的忠实粉丝,但在这种特殊情况下,它似乎有点矫枉过正。除非你有一个代码覆盖配额,否则你必须打击,或者除非你特别谨慎并希望对你的课程有所保证,否则我不会在这个特殊情况下烦恼。
public function testGenerate ()
{
$expected = 'The quick brown fox jumps over the lazy dog';
$this -> object = new Documentation ($expected);
$actual = $this -> object -> generate ();
// Check we got a DOM Element object
$this -> assertInstanceOf ('\DOMElement', $actual);
// Check that our DOM element is of the Documentation type
$this -> assertEquals ('documentation', $actual -> tagName);
// Check that our Documentation element has a single text node child
$this -> assertEquals (1, $actual -> childNodes -> length);
$this -> assertInstanceOf ('\DOMText', $actual -> firstChild);
// Check that the text node has the value we passed in originally
$this -> assertEquals ($expected, $actual -> firstChild -> wholeText);
}