我正在尝试使用Zend和PHPUnit为控制器编写单元测试
在代码中我从php:// input获取数据
$req = new Zend_Controller_Request_Http();
$data = $req->getRawBody();
Run Code Online (Sandbox Code Playgroud)
当我测试真实的应用程序时,我的代码工作正常,但除非我可以提供数据作为原始http帖子,否则$ data将始终为空.getRawBody()方法基本上调用file_get_contents('php:// input'),但是如何覆盖它以便将测试数据提供给我的应用程序.
我正在编写测试用例,这是我的一个问题.
所以说我正在测试一个简单的函数 someClass::loadValue($value)
正常的测试用例很简单,但假设在传入null或-1时,函数调用会生成一个PHP警告,这被认为是一个错误.
问题是,如何编写我的PHPUnit测试用例,以便在函数正常处理null/-1时成功,并在抛出PHP警告时失败?
谢谢,
我已经创建了一个邮件包装器类.我知道有很多库可以发送电子邮件,但我想学习TDD ...所以,我已经创建了一些测试,我有一些代码.现在我可以在构造函数上设置电子邮件地址并验证它......如果电子邮件地址错误,则会引发异常.电子邮件地址是唯一一个必填字段...我没有设置和获取因为用户将在构造函数上设置所有电子邮件数据.
现在,我要编写发送测试.我不知道如何开始它.如果我不想有定位器和吸气剂,我怎么能测试值是否存在(主题,邮件正文,标题)?如何测试是否可以发送电子邮件?
现实世界的TDD示例对我来说很难.我试图了解它,我已经阅读了很多东西,但我无法测试真正的代码.
谢谢.
我使用PHPUnit对我的函数进行单元测试,当代码中出现任何警告时,不会对该函数执行测试脚本,任何人都可以告诉我如何忽略警告并继续测试
我几天前使用PEAR安装程序安装了PHPUnit(我还安装了Selenium RC以便在PHP中进行测试).现在我要卸载它(也删除所有相关的文件夹和文件)
我运行了以下命令:
pear uninstall phpunit/PHPUnit
Run Code Online (Sandbox Code Playgroud)
和控制台显示:
phpunit/PHPUnit not installed
Run Code Online (Sandbox Code Playgroud)
我检查了PHPUnit文件夹,它还在那里?
它被卸载了吗?我尝试重新安装一个新的PHPUnit,但控制台显示:
No releases available for package "pear.phpunit.de/PHPUnit"
Run Code Online (Sandbox Code Playgroud)
我该如何重新安装?
这是输出pear list -c pear.phpunit.de:

这是输出pear list -c pear.phpunit.de:

我是单元测试和PHPUnit的新手.
我需要一个模拟,我有一个完全控制,实现ConfigurationInterface接口.测试主题是ReportEventParamConverter对象,测试必须检查我的对象和界面之间的交互.
ReportEventParamConverter 对象(这里简化):
class ReportEventParamConverter implements ParamConverterInterface
{
/**
* @param Request $request
* @param ConfigurationInterface $configuration
*/
function apply(Request $request, ConfigurationInterface $configuration)
{
$request->attributes->set($configuration->getName(), $reportEvent);
}
/**
* @param ConfigurationInterface $configuration
* @return bool
*/
function supports(ConfigurationInterface $configuration)
{
return 'My\Namespaced\Class' === $configuration->getClass();
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图模仿界面的方式:
$cls = 'Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface';
$mock = $this->getMock($mockCls);
Run Code Online (Sandbox Code Playgroud)
我需要模拟两种方法的返回值:getClass()和getName().例如:
$mock->expects($this->any())
->method('getClass')
->will($this->returnValue('Some\Other\Class'))
;
Run Code Online (Sandbox Code Playgroud)
当我创建一个新的ReportEventParamConverter测试supports()方法时,我得到以下PHPUnit错误:
致命错误:调用未定义的方法Mock_ConfigurationInterface_21e9dccf :: getClass().
$converter = new ReportEventParamConverter();
$this->assertFalse($converter->supports($mock));
Run Code Online (Sandbox Code Playgroud) 如何Iterator以强大的方式模拟实现接口的类的依赖项?
我有一个内置Slim的API,如下所示:
$app->group('/'.$endpoint, function () use ($app, $endpoint) {
$handler = Api\Rest\Handlers\Factory::load($endpoint);
if (is_null($handler)) {
throw new \Exception('No REST handler found for '.$endpoint);
}
$app->get('(/:id)', function ($id) use ($app, $handler) {
echo json_encode($handler->get($id));
});
$app->post('', function () use ($app, $handler) {
echo json_encode($handler->post($app->request->post()));
});
$app->put(':id', function ($id) use ($app, $handler) {
echo json_encode($handler->put($id, $app->request->put()));
});
$app->delete(':id', function ($id) use ($app, $handler) {
echo json_encode($handler->delete($id));
});
});
Run Code Online (Sandbox Code Playgroud)
$endpoint 是一个字符串,例如'user';
我该如何为它编写单元测试?
理想的情况下;
class RestUserTest extends PHPUnitFrameworkTestCase
{
public function testGet()
{
$slim = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的laravel控制器上运行此功能测试.我想测试图像处理,但这样做我想伪造图像上传.我该怎么做呢?我在网上找到了一些例子,但似乎没有一个适合我.这就是我所拥有的:
public function testResizeMethod()
{
$this->prepareCleanDB();
$this->_createAccessableCompany();
$local_file = __DIR__ . '/test-files/large-avatar.jpg';
$uploadedFile = new Symfony\Component\HttpFoundation\File\UploadedFile(
$local_file,
'large-avatar.jpg',
'image/jpeg',
null,
null,
true
);
$values = array(
'company_id' => $this->company->id
);
$response = $this->action(
'POST',
'FileStorageController@store',
$values,
['file' => $uploadedFile]
);
$readable_response = $this->getReadableResponseObject($response);
}
Run Code Online (Sandbox Code Playgroud)
但是控制器没有通过这个检查:
elseif (!Input::hasFile('file'))
{
return Response::error('No file uploaded');
}
Run Code Online (Sandbox Code Playgroud)
所以文件不能正确传递.我该怎么做?
更新
基于max.lanin的建议,我也尝试过:
public function testResizeMethod()
{
$this->prepareCleanDB();
$this->_createAccessableCompany();
$local_file = __DIR__ . '/test-files/large-avatar.jpg';
$uploadedFile = new Symfony\Component\HttpFoundation\File\UploadedFile(
$local_file,
'large-avatar.jpg',
'image/jpeg',
null,
null,
true
);
$values = …Run Code Online (Sandbox Code Playgroud) 我最近在实时应用程序上遇到了一个问题.我意识到我有越来越多的并发异常和数据库锁.
基本上我启动一个事务,它需要一个SELECT和一个INSERT在同一个表上提交.
但是因为负载非常繁重,所以每个事务都会锁定表,在大多数情况下,它会如此之快,不会导致任何问题,但锁存器开始等待的时间越来越多.
我通过调整查询来解决这个问题.
虽然,现在,我想用PHPUnit编写一些测试来验证我的修复并避免任何回归.
我无法找到任何关于如何做到这一点的材料.
由于PHP不是多线程的,我不知道如何在单个测试中运行并发查询来验证.
基本上,我希望能够在一次测试中运行多个调用,以确保一切正常.
我知道我可以通过直接查询http服务器并加载整个应用程序来尝试进行一些高级测试,但由于我的问题来自一个独立的库,我宁愿自己测试它.
有任何想法吗?