PHPUnit如何测试使用posix_getgrgid从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);

你知道一种更一致的方法来测试这个类吗

这个东西获取linux系统用于组的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与我正在测试的另一个更大的类隔离开来。这些函数不稳定有点让人头疼。也许我不需要在这个类中进行测试,谢谢你的帮助和文章。我确实认为mock
posix_getgrgid()
是一种方法,因为这才是你真正想要测试的。这个函数的返回值是无关的,你说得很对。读完这篇文章后,我想这正是我要做的。非常感谢你指出了正确的方向。请随意添加你提出的任何解决方案,作为你自己问题的答案。我相信这会对其他人很有帮助。