......不知道'mock'是否是正确的词.
无论如何,我有一个继承的代码库,我正在尝试编写一些基于时间的测试.试图不要太模糊,代码与查看项目的历史并确定该项目现在是否基于时间阈值有关.
在某些时候,我还需要测试在该历史记录中添加内容并检查阈值现在是否已更改(显然,更正).
我正在测试的问题是我正在测试的部分代码是使用对time()的调用,所以我发现很难确切知道阈值时间应该是什么,基于我的事实我不确定何时会调用time()函数.
所以我的问题基本上是这样的:有没有办法让我"覆盖"time()调用,或以某种方式"模仿"时间,以便我的测试在"已知时间"工作?
或者我只是必须接受这样一个事实,即我将不得不在我正在测试的代码中执行某些操作,以某种方式允许我强制它在需要时使用特定时间?
无论哪种方式,是否有任何"常见做法"来开发对测试友好的时间敏感功能?
编辑:我的问题的一部分也是历史中发生的事情影响阈值的事实.这是我的部分问题的一个例子......
想象一下,你有一个香蕉,当你需要吃它时,你正试图解决这个问题.假设它将在3天内到期,除非它喷洒了一些化学物质,在这种情况下,我们会在施用喷雾时添加4天到期.然后,我们可以通过冻结它再添加3个月,但是如果它已经冷冻,那么我们只有1天的时间来解冻它.
所有这些规则都是由历史时间决定的.我同意我可以在几秒钟内使用Dominik的测试建议,但我的历史数据是什么?我应该在飞行中"创造"吗?
正如您可能或可能无法分辨的那样,我仍然试图了解所有这些"测试"概念;)
直到今天,我还以为我对静态修饰符的工作方式有了很好的把握.我知道(在非专业术语中)函数中的静态变量不会在对该函数的调用中"重置",并且我知道类上的静态变量和函数可以通过类本身调用它们来访问(不是实例化)班级).
我的问题是:今天我发现如果我在一个类的非静态函数内声明一个静态变量,那个类的所有实例都会在对成员函数的单独调用中共享该静态变量.
例如:
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来说是独一无二的?
在HHVM中运行我的PHP脚本时,我看到我可以传递调试主机和调试端口参数,但我似乎无法确切地知道它的作用以及如何使用它.
这些参数是用于调试HHVM本身(或者可能是编译的PHP本身)还是用于调试PHP脚本?也就是说,它是用于调试HHVM的工作方式,还是用于调试,就像我通常使用XDebug一样,比如说?
起初我尝试将它连接到我为XDebug设置的IDE,但这似乎没有做任何事情,所以没有进行疯狂的追逐,我想我会问这里.
什么是HHVM的调试参数,确切地说,我如何使用它们来调试HHVM中的PHP脚本呢?
我正在研究用于通过PHP解析HL7消息的选项。我知道PEAR上的Net_HL7程序包,但是说实话,我不希望我的代码基于看似“被遗弃”的程序包,即使我这样做,我也只是不认为自己的大脑适合功能“正确”。也许我不懂HL7的背景知识会更有意义。
无论如何:我猜是在95%的时间内,我将解析和读取消息中的数据。另外5%,我将创建和/或发送消息。
我不一定需要对消息本身进行任何形式的验证,我只需要拉/推数据。
我绝对需要对“非XML” HL7 v2.x的支持,但是自然地,基于XML的v2和v3会是一个好处。
那么,有人对我可能使用的其他库有任何建议吗?我正在寻找纯PHP解决方案,因为我希望对服务器的最低要求不是“在此复制此目录”。
谢谢!
我正在编写一个用户输入库,以便轻松管理动态创建表单以询问用户数据.
我想让最终的开发人员不得不"思考"最低限度,所以我让他们抛出异常而不是返回'true'或'false'并记住处理返回值等.
实际上,它的效果非常好.抛出异常也给了我一个附带好处,即能够在日志中自动记录用户错误,所有这些都是"免费"的,因为异常的创建导致日志记录完成.
说完所有这些之后,我想知道这是否真的"反对最佳做法"?我是否应该仅在我甚至不期望用户输入错误的时候保留例外,或者可以说"来自用户的数据有问题......这是一个例外"?
有什么想法吗?
我有一个通过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需求。
从理论上讲,使用枪口的降级版本可以满足最初的要求。如何让作曲家做到这一点?