小编Nar*_*sus的帖子

我可以在PHPUnit中"模拟"时间吗?

......不知道'mock'是否是正确的词.

无论如何,我有一个继承的代码库,我正在尝试编写一些基于时间的测试.试图不要模糊,代码与查看项目的历史并确定该项目现在是否基于时间阈值有关.

在某些时候,我还需要测试在该历史记录中添加内容并检查阈值现在是否已更改(显然,更正).

我正在测试的问题是我正在测试的部分代码是使用对time()的调用,所以我发现很难确切知道阈值时间应该是什么,基于我的事实我不确定何时会调用time()函数.

所以我的问题基本上是这样的:有没有办法让我"覆盖"time()调用,或以某种方式"模仿"时间,以便我的测试在"已知时间"工作?

或者我只是必须接受这样一个事实,即我将不得不在我正在测试的代码中执行某些操作,以某种方式允许我强制它在需要时使用特定时间?

无论哪种方式,是否有任何"常见做法"来开发对测试友好的时间敏感功能?

编辑:我的问题的一部分也是历史中发生的事情影响阈值的事实.这是我的部分问题的一个例子......

想象一下,你有一个香蕉,当你需要吃它时,你正试图解决这个问题.假设它将在3天内到期,除非它喷洒了一些化学物质,在这种情况下,我们会在施用喷雾时添加4天到期.然后,我们可以通过冻结它再添加3个月,但是如果它已经冷冻,那么我们只有1天的时间来解冻它.

所有这些规则都是由历史时间决定的.我同意我可以在几秒钟内使用Dominik的测试建议,但我的历史数据是什么?我应该在飞行中"创造"吗?

正如您可能或可能无法分辨的那样,我仍然试图了解所有这些"测试"概念;)

php phpunit

69
推荐指数
5
解决办法
2万
查看次数

对象成员函数中的PHP和静态变量

直到今天,我还以为我对静态修饰符的工作方式有了很好的把握.我知道(在非专业术语中)函数中的静态变量不会在对该函数的调用中"重置",并且我知道类上的静态变量和函数可以通过类本身调用它们来访问(不是实例化)班级).

我的问题是:今天我发现如果我在一个类的非静态函数声明一个静态变量,那个类的所有实例都会在对成员函数的单独调用中共享该静态变量.

例如:

class A {
    public function GetValue() {
        static $value = 0;
        $value++;
        return $value;
    }
}

$instance_1 = new A();
$instance_2 = new A();
echo $instance_1->GetValue();
echo $instance_1->GetValue();

echo $instance_2->GetValue();
echo $instance_2->GetValue();

echo $instance_1->GetValue();
echo $instance_1->GetValue();
Run Code Online (Sandbox Code Playgroud)

请注意,GetValue函数既未声明为静态函数,也未以静态方式使用(如在类本身中调用).

现在,我总是认为这会输出:121234

相反,我发现它将输出:123456

就像我说的,如果静态变量$ value在静态函数中,我会理解这一点.然而,由于它在非静态函数中,我只是假设它只与每个单独实例化中的函数"绑定".

我想我的问题是双重的,然后...... 1)这是一个错误还是预期的行为?2)其他语言是否以相同的方式对待这些"静态非静态"变量,或者这对PHP来说是独一无二的?

php static

16
推荐指数
2
解决办法
4812
查看次数

在HHVM中调试?

在HHVM中运行我的PHP脚本时,我看到我可以传递调试主机和调试端口参数,但我似乎无法确切地知道它的作用以及如何使用它.

这些参数是用于调试HHVM本身(或者可能是编译的PHP本身)还是用于调试PHP脚本?也就是说,它是用于调试HHVM的工作方式,还是用于调试,就像我通常使用XDebug一样,比如说?

起初我尝试将它连接到我为XDebug设置的IDE,但这似乎没有做任何事情,所以没有进行疯狂的追逐,我想我会问这里.

什么是HHVM的调试参数,确切地说,我如何使用它们来调试HHVM中的PHP脚本呢?

php debugging xdebug hhvm

14
推荐指数
3
解决办法
7527
查看次数

HL7在PHP中解析

我正在研究用于通过PHP解析HL7消息的选项。我知道PEAR上的Net_HL7程序包,但是说实话,我不希望我的代码基于看似“被遗弃”的程序包,即使我这样做,我也只是不认为自己的大脑适合功能“正确”。也许我不懂HL7的背景知识会更有意义。

无论如何:我猜是在95%的时间内,我将解析和读取消息中的数据。另外5%,我将创建和/或发送消息。

我不一定需要对消息本身进行任何形式的验证,我只需要拉/推数据。

我绝对需要对“非XML” HL7 v2.x的支持,但是自然地,基于XML的v2和v3会是一个好处。

那么,有人对我可能使用的其他库有任何建议吗?我正在寻找纯PHP解决方案,因为我希望对服务器的最低要求不是“在此复制此目录”。

谢谢!

php hl7

5
推荐指数
0
解决办法
7084
查看次数

我应该对用户输入错误抛出异常吗?

我正在编写一个用户输入库,以便轻松管理动态创建表单以询问用户数据.

我想让最终的开发人员不得不"思考"最低限度,所以我让他们抛出异常而不是返回'true'或'false'并记住处理返回值等.

实际上,它的效果非常好.抛出异常也给了我一个附带好处,即能够在日志中自动记录用户错误,所有这些都是"免费"的,因为异常的创建导致日志记录完成.

说完所有这些之后,我想知道这是否真的"反对最佳做法"?我是否应该仅在我甚至不期望用户输入错误的时候保留例外,或者可以说"来自用户的数据有问题......这是一个例外"?

有什么想法吗?

php

3
推荐指数
1
解决办法
1107
查看次数

允许Composer降级对require的依赖关系?

我有一个通过composer安装的需要guzzlehttp的软件包>=6.0。根据这一要求,作曲家选择安装6.2.1。

我现在尝试要求明确要求6.1.1的依赖项。

我收到以下错误: Problem 1 - Can only install one of: guzzlehttp/guzzle[6.1.1, 6.2.1]. - Can only install one of: guzzlehttp/guzzle[6.2.1, 6.1.1]. - Can only install one of: guzzlehttp/guzzle[6.1.1, 6.2.1]. - chargely/chargify-sdk-php v0.1.1 requires guzzlehttp/guzzle 6.1.1 -> satisfiable by guzzlehttp/guzzle[6.1.1]. - Installation request for chargely/chargify-sdk-php ^0.1.1 -> satisfiable by chargely/chargify-sdk-php[v0.1.1]. - Installation request for guzzlehttp/guzzle (locked at 6.2.1) -> satisfiable by guzzlehttp/guzzle[6.2.1].

另外,请composer why确认唯一的版本是我的>=6.0需求。

从理论上讲,使用枪口的降级版本可以满足最初的要求。如何让作曲家做到这一点?

composer-php

3
推荐指数
1
解决办法
8968
查看次数

标签 统计

php ×5

composer-php ×1

debugging ×1

hhvm ×1

hl7 ×1

phpunit ×1

static ×1

xdebug ×1