我在模拟重载的__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) 假设我有一个服务器在网址上提供HTML文件,https://example.com/这是指网址上的css文件https://test.com/mystyles.css.是否可以将mystyles.css文件作为HTTP2连接的一部分与html内容一起推送,以便浏览器使用此css内容?
我试图在我的localhost上使用自签名证书创建这样的请求(我已经为我的浏览器中的两个主机预先创建了一个安全例外),通过在请求到达时发送html文件http://localhost/,然后推送css :authority或Host标头中的不同主机名/端口.但是,在整页刷新时,CSS文件是从服务器的单独请求中获取的,而不是使用推送的css文件.
请参阅此要点以获取我用于测试此文件的文件.如果我访问http://localhost:8080/那么文本是红色的,但如果我访问http://test:8080/它是绿色的,暗示如果原点是相同的,则使用推送的内容.
是否需要使用标头组合才能使用此功能?可能调用CORS?
我有一个同时使用 PHP 和 Python 的项目,我想使用 JetBrains IDE(在本例中为 PhpStorm 和 PyCharm)来处理这两种语言。
但是,当我同时使用两个 IDE 打开项目时,每当我从一个 IDE 切换到另一个 IDE 时,就会弹出一个窗口,因为新聚焦的 IDE 会检测到另一个 IDE 已写入项目目录的元数据。我想这也会是 JetBrains IDE 的其他组合之间的问题。
我有一个解决方法(我将在答案中发布供其他人查看),但设置起来有点尴尬,而且我很可能正在处理使用相同语言组合的其他项目。
有更简单的解决方案吗?
比如说,在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)