小编Ben*_*min的帖子

PHPUnit:模拟__get()导致"__ get()必须正好接受1个参数......"

我在模拟重载的__get($ index)方法时遇到了问题.要模拟的类的代码和使用它的被测系统如下:

<?php
class ToBeMocked
{
    protected $vars = array();

    public function __get($index)
    {
        if (isset($this->vars[$index])) {
            return $this->vars[$index];
        } else {
            return NULL;
        }
    }
}

class SUTclass
{
    protected $mocky;

    public function __construct(ToBeMocked $mocky)
    {
        $this->mocky = $mocky;
    }

    public function getSnack()
    {
        return $this->mocky->snack;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试看起来如下:

<?php    
class GetSnackTest extends PHPUnit_Framework_TestCase
{
    protected $stub;
    protected $sut;

    public function setUp()
    {
       $mock = $this->getMockBuilder('ToBeMocked')
                     ->setMethods(array('__get')
                     ->getMock();

       $sut = new SUTclass($mock);
    }

    /**
     * @test
     */
    public function …
Run Code Online (Sandbox Code Playgroud)

php phpunit overloading built-in

12
推荐指数
1
解决办法
3455
查看次数

是否可以使用Http2跨源推送请求?

假设我有一个服务器在网址上提供HTML文件,https://example.com/这是指网址上的css文件https://test.com/mystyles.css.是否可以将mystyles.css文件作为HTTP2连接的一部分与html内容一起推送,以便浏览器使用此css内容?

我试图在我的localhost上使用自签名证书创建这样的请求(我已经为我的浏览器中的两个主机预先创建了一个安全例外),通过在请求到达时发送html文件http://localhost/,然后推送css :authorityHost标头中的不同主机名/端口.但是,在整页刷新时,CSS文件是从服务器的单独请求中获取的,而不是使用推送的css文件.

请参阅此要点以获取我用于测试此文件的文件.如果我访问http://localhost:8080/那么文本是红色的,但如果我访问http://test:8080/它是绿色的,暗示如果原点是相同的,则使用推送的内容.

是否需要使用标头组合才能使用此功能?可能调用CORS?

cors http2 http2-lawyers

9
推荐指数
1
解决办法
954
查看次数

如何在同一项目上使用多个 JetBrains IDE,而在它们之间切换时不会出现烦人的弹出窗口?

我有一个同时使用 PHP 和 Python 的项目,我想使用 JetBrains IDE(在本例中为 PhpStorm 和 PyCharm)来处理这两种语言。

但是,当我同时使用两个 IDE 打开项目时,每当我从一个 IDE 切换到另一个 IDE 时,就会弹出一个窗口,因为新聚焦的 IDE 会检测到另一个 IDE 已写入项目目录的元数据。我想这也会是 JetBrains IDE 的其他组合之间的问题。

我有一个解决方法(我将在答案中发布供其他人查看),但设置起来有点尴尬,而且我很可能正在处理使用相同语言组合的其他项目。

有更简单的解决方案吗?

jetbrains-ide pycharm phpstorm

5
推荐指数
1
解决办法
931
查看次数

将 proc_open() 获取的管道重定向到文件以处理剩余的进程持续时间

比如说,在PHP中,我有一堆单元测试。假设他们需要运行某些服务。

理想情况下,我希望我的引导脚本能够:

  • 启动这个服务
  • 等待服务达到所需状态
  • 将控制权交给选择的单元测试框架来运行测试
  • 测试结束时进行清理,适当地优雅地终止服务
  • 设置某种方式来捕获服务的所有输出以进行日志记录和调试

我目前正在用来proc_open()初始化我的服务,使用管道机制捕获输出,通过检查输出来检查服务是否达到了我需要的状态。

然而,此时我很困惑 - 如何在脚本的剩余时间内捕获其余的输出(包括 STDERR),同时仍然允许我的单元测试运行?

我可以想到一些可能冗长的解决方案,但在花时间调查它们之前,我想知道是否有其他人遇到过这个问题以及他们找到了什么解决方案(如果有),而不影响响应。

编辑:

这是我在引导脚本中初始化的类的简化版本(带有new ServiceRunner),以供参考:

<?php


namespace Tests;


class ServiceRunner
{
    /**
     * @var resource[]
     */
    private $servicePipes;

    /**
     * @var resource
     */
    private $serviceProc;

    /**
     * @var resource
     */
    private $temp;

    public function __construct()
    {
        // Open my log output buffer
        $this->temp = fopen('php://temp', 'r+');

        fputs(STDERR,"Launching Service.\n");
        $this->serviceProc      = proc_open('/path/to/service', [
            0 => array("pipe", "r"),
            1 => array("pipe", "w"),
            2 => array("pipe", …
Run Code Online (Sandbox Code Playgroud)

php pipe file-descriptor

5
推荐指数
1
解决办法
933
查看次数