我不确定我是否可以这样做,如果我也应该这样做。我正在编写一些可能具有相同数据提供程序(IP地址或整数)的测试。
class LocalIpAddressTest extends \PHPUnit_Framework_TestCase
{
protected $parser = null;
protected function setUp()
{
$this->parser = new ApacheLogParser();
$this->parser->setFormat('%A');
}
protected function tearDown()
{
$this->parser = null;
}
/**
* @dataProvider successProvider
*/
public function testSuccess($line)
{
$entry = $this->parser->parse($line);
$this->assertEquals($line, $entry->localIp);
}
/**
* @expectedException \Kassner\ApacheLogParser\FormatException
* @dataProvider invalidProvider
*/
public function testInvalid($line)
{
$this->parser->parse($line);
}
public function successProvider()
{
return array(
array('192.168.1.1'),
array('192.168.001.01'),
array('172.16.0.1'),
array('192.168.0.255'),
array('8.8.8.8'),
// not sure about those 2. They are valid ip-format, but can't be assigned as server address
array('0.0.0.0'),
array('255.255.255.255'),
);
}
public function invalidProvider()
{
return array(
// over 255
array('192.168.1.256'),
array('256.256.256.256'),
array('321.432.543.654'),
// incomplete
array('192.168.1.'),
array('192.168.1'),
array('192.168.'),
array('192.168'),
array('192.'),
array('192'),
array(''),
// malformed
array('1921.68.1.1'),
array('192.681.1.'),
array('.1921.68.1.1'),
array('....'),
array('1.9.2.'),
array('192.168.1.1/24'),
// letters (it' not supporting IPv6 yet...)
array('abc'),
array('192.168.1.x'),
array('insert-ip-address-here'),
array('a.b.c.d'),
);
}
}
然后,我必须测试何时使用$this->parser->setFormat('%a')
,它还接收IP地址作为参数。在这种情况下,我复制所有代码只是为了改变一行。它应该是那样的吗?有办法重用这些数据提供者吗?
答案 0 :(得分:2)
我认为只要dataprovider方法是同一个类的一部分,你应该能够毫无问题地做到这一点。你可以把它包含在一个抽象的测试用例中,你的测试用例从php 5.4 +开始继承或利用这些特性。