PHPUnit如何测试使用posix_getgrgid从gid获取组名的方法
你知道一种更一致的方法来测试这个类吗 这个东西获取linux系统用于组的gid,并将组名返回给我PHPUnit如何测试使用posix_getgrgid从gid获取组名的方法,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,你知道一种更一致的方法来测试这个类吗 这个东西获取linux系统用于组的gid,并将组名返回给我 class LinuxIdHandler { /** * @param int $gid * @return string The linux group name. */ public function getGroupNameByGid($gid) { $group = posix_getgrgid($gid);
class LinuxIdHandler
{
/**
* @param int $gid
* @return string The linux group name.
*/
public function getGroupNameByGid($gid)
{
$group = posix_getgrgid($gid);
return $group['name'];
}
}
但是…
尝试进行单元测试会给我带来麻烦,因为在我的Macbook上运行phpunit会告诉我组id 0是“轮子”。运行Ubuntu的jenkins服务器告诉我组id 0是“root”
我有一个我认为是一个相当糟糕的方法,但我感兴趣的是,如果有人有一个更干净的方法
class LinuxIdHandlerTest extends \PHPUnit_Framework_TestCase
{
/** @var LinuxIdHandler */
private $handler;
public function setUp()
{
$this->handler = new LinuxIdHandler();
}
public function testGetGroupNameByUid()
{
switch (PHP_OS) {
case 'Darwin':
$groupName = 'wheel';
break;
default:
$groupName = 'root';
}
$this->assertEquals($groupName, $this->handler->getGroupNameByGid(0));
}
}
作为上述注释的替代方案,为什么不测试返回正确值的不同gid呢?i、 例如,使用gid1100,甚至用户gid;无论返回什么值,都可以始终检查
我同意上面的评论,但这种方法也可以解决您的问题。因此,您在这里所做的基本上是尝试单元测试
posix_getgrgid()
。你不需要这样做。为什么要费心做这个测试呢?如果有什么问题的话,您只需要测试posix_getgrgid()
是否使用预期参数调用。也许你能读一读这个~真的。我创建这个类的唯一原因是为了将posix_getgrgid与我正在测试的另一个更大的类隔离开来。这些函数不稳定有点让人头疼。也许我不需要在这个类中进行测试,谢谢你的帮助和文章。我确实认为mockposix_getgrgid()
是一种方法,因为这才是你真正想要测试的。这个函数的返回值是无关的,你说得很对。读完这篇文章后,我想这正是我要做的。非常感谢你指出了正确的方向。请随意添加你提出的任何解决方案,作为你自己问题的答案。我相信这会对其他人很有帮助。