小编Fox*_*ion的帖子

如何创建具有Doctrine实体的测试而不持久化它们(如何设置id)

我正在为Symfony2项目进行测试,现在我正在寻找一种方法来创建涉及实体对象的测试而不会持久化它们.问题是:id是一个私有字段,没有setter.我可以创建新对象并设置一些属性,但我无法测试涉及getId()调用的任何内容.

$entity = new TheEntity();
// Can't set ID!
$entity->setProperty('propertyValue');

$name = $entity->getProperty(); // OK
$id = $entity->getId(); // not OK - null
Run Code Online (Sandbox Code Playgroud)

我所知道的决议:

  1. 初始化整个内核(Symfony的WebTestCase :: createKernel())并持久化实体
  2. 为每个实体创建一个模拟对象,它将返回有效的ID
  3. 黑客像TheEntity类中的静态方法返回初始化对象,或添加id字段的setter

建议的处理方法是什么,如何使用set ID以干净,快速的方式获取实体进行测试?

编辑

原来我可以用嘲笑来解决这个问题......对不起,我还在学习.我一直在寻找一种干净,标准,快速的方法来完成任务.但是我忘记了第二个参数getMock()- 也就是说我不必模拟我将要使用的实体的每个方法.我想避免多个->expects()->method()->will()等等.这是通过添加:array('getId').这个辅助方法解决了这个问题:

protected function getEntityMock($entityClass, $id)
{
    $entityMock = $this->getMock($entityClass, array('getId'));
    $entityMock
            ->expects($this->any())
            ->method('getId')
            ->will($this->returnValue($id));

    return $entityMock;
}
Run Code Online (Sandbox Code Playgroud)

当创建同一个类的许多实体时,事情当然可以通过更多辅助方法来简化,例如:

protected function getTheEntityMock($id)
{
    return $this->getEntityMock('\The\NameSpace\TheEntity', $id);
}
Run Code Online (Sandbox Code Playgroud)

唯一的限制是实体本身不能使用 …

testing phpunit mocking symfony doctrine-orm

13
推荐指数
3
解决办法
4847
查看次数

PHP和HTTP身份验证 - 使用filter_input获取登录名和密码

我试图使用filter_input从PHP中的HTTP身份验证中检索用户登录名和密码,但我得到PHP_AUTH_USER和PHP_AUTH_PW的空值.我做了一个测试:

$phpAuthUserFV = filter_input(INPUT_SERVER, 'PHP_AUTH_USER');
// gives null

$phpAuthUser = $_SERVER['PHP_AUTH_USER'];
// gives the user login entered

$remoteAddr = filter_input(INPUT_SERVER, 'REMOTE_ADDR');
// gives the remote address

$phpSelf = filter_input(INPUT_SERVER, 'PHP_SELF');
// gives the PHP_SELF value
Run Code Online (Sandbox Code Playgroud)

使用PHP 5.5.5和5.3.3进行测试.

我错过了什么吗?我只是想知道,为什么filter_input失败了这两个$ _SERVER键,但与其他键合作.

php http-authentication

7
推荐指数
1
解决办法
2394
查看次数

清理在事件侦听器中访问表单选项的方法

如何以干净的方式从事件侦听器访问传递给buildForm()的$选项?请看下面的代码示例:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'preSetDataListener']);
    }

    public function preSetDataListener(FormEvent $event)
    {
        // how would I access $options from buildFrom here?
    }
Run Code Online (Sandbox Code Playgroud)

forms symfony

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

在Jenkins中通知/检查SCM轮询失败

我想在Jenkins中检查或获取有关SCM轮询失败的通知(例如,当存储库URL已更改或分支被删除时).我想到了这些:

a)Jenkins控制台脚本,它将列出这些错误的工作

b)为Jenkins配置/安装插件以某种方式通知我这个事实(电子邮件,任何东西)

c)外部脚本/可执行文件(bash,python,...),它将列出由于SCM轮询失败而在过去X小时内失败的构建

version-control scripting polling jenkins

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