我不知道如何测试创建查询生成器
I do not know how to test the create query builder
我正在尝试测试存储库的所有方法,但我不知道如何进行测试,我想使用 Profecy。我正在使用 DoctrineMongoDBBundle.
实体
class UsuarioEntidade{
/**
* @MongoDB\Id
*/
protected $usuId;
/**
* @MongoDB\Field(type="string", name="usua_nome")
*/
protected $usuNome;
/**
* @MongoDB\Field(type="string", name="usua_telefone")
*/
protected $usuTelefone;
/**
* @MongoDB\Field(type="string", name="usua_email")
*/
protected $usuEmail;
/**
* @MongoDB\Field(type="string", name="usua_imagem_perfil")
*/
protected $usuImagemPerfil;
/**
* @MongoDB\Field(type="date")
*/
protected $createdAt;
##get and set
存储库
class UsuarioRepositorio
{
protected $dm;
public function __construct(DocumentManager $documentManager)
{
$this->dm = $documentManager;
}
public function all(array $input = null)
{
$usuario = UsuarioEntidade::class;
$all = $this->dm->createQueryBuilder($usuario);
return $all->getQuery();
}
这是我不知道如何基于存储库执行的测试class。
class UsuarioRepositorioTest extends TestCase
{
protected $repositorio;
protected $documento;
public function setUp()
{
$this->documento = $this->prophesize(DocumentManager::class);
$this->repositorio = new UsuarioRepositorio($this->documento->reveal());
}
public function testObtendoTodosOsDados()
{
$output = $this->usuario();
$this->documento->createQueryBuilder(UsuarioEntidade::class)->willReturn($output)->shouldBeCalled();
$all = $this->repositorio->all();
$this->assertEquals($output, $all);
}
protected function usuario()
{
$usuarioEntidade = new UsuarioEntidade();
$usuarioEntidade->setUsuNome('Humanos');
$usuarioEntidade->setUsuTelefone('89855236554');
$usuarioEntidade->setUsuEmail('mano@email.com');
$usuarioEntidade->setUsuImagemPerfil('/application/sam/tests/Usuario/ImagemPerfil/sam.png');
$data = new \DateTime();
$usuarioEntidade->setCreatedAt($data->format('Y-m-d'));
return $usuarioEntidade;
}
我不知道如何模拟方法 "getQuery()"。
总是出现此错误:
错误:调用数组
上的成员函数 getQuery()
代码中的问题是您的 createQUeryBuilder()
期望 return 是一个数组,而您正试图在该数组上调用一个函数。
您必须模拟一个 QueryBuilder
对象,并为其 getQuery()
函数设置一个预期,以 return 您想要的输出。当您为 DocumentManager createQueryBuilder()
函数设置预期时,必须 returned QueryBuilder mock。
像这样:
public function testObtendoTodosOsDados()
{
$output = $this->usuario();
$mockQueryBuilder = $this->prophesize(QueryBuilder::class); // Remember to import the proper QueryBuilder namespace
$mockQueryBuilder->getQuery()->willReturn($output)->shouldBeCalled();
$this->documento->createQueryBuilder(UsuarioEntidade::class)->willReturn($mockQueryBuilder)->shouldBeCalled();
$all = $this->repositorio->all();
$this->assertEquals($output, $all);
}
我正在尝试测试存储库的所有方法,但我不知道如何进行测试,我想使用 Profecy。我正在使用 DoctrineMongoDBBundle.
实体
class UsuarioEntidade{
/**
* @MongoDB\Id
*/
protected $usuId;
/**
* @MongoDB\Field(type="string", name="usua_nome")
*/
protected $usuNome;
/**
* @MongoDB\Field(type="string", name="usua_telefone")
*/
protected $usuTelefone;
/**
* @MongoDB\Field(type="string", name="usua_email")
*/
protected $usuEmail;
/**
* @MongoDB\Field(type="string", name="usua_imagem_perfil")
*/
protected $usuImagemPerfil;
/**
* @MongoDB\Field(type="date")
*/
protected $createdAt;
##get and set
存储库
class UsuarioRepositorio
{
protected $dm;
public function __construct(DocumentManager $documentManager)
{
$this->dm = $documentManager;
}
public function all(array $input = null)
{
$usuario = UsuarioEntidade::class;
$all = $this->dm->createQueryBuilder($usuario);
return $all->getQuery();
}
这是我不知道如何基于存储库执行的测试class。
class UsuarioRepositorioTest extends TestCase
{
protected $repositorio;
protected $documento;
public function setUp()
{
$this->documento = $this->prophesize(DocumentManager::class);
$this->repositorio = new UsuarioRepositorio($this->documento->reveal());
}
public function testObtendoTodosOsDados()
{
$output = $this->usuario();
$this->documento->createQueryBuilder(UsuarioEntidade::class)->willReturn($output)->shouldBeCalled();
$all = $this->repositorio->all();
$this->assertEquals($output, $all);
}
protected function usuario()
{
$usuarioEntidade = new UsuarioEntidade();
$usuarioEntidade->setUsuNome('Humanos');
$usuarioEntidade->setUsuTelefone('89855236554');
$usuarioEntidade->setUsuEmail('mano@email.com');
$usuarioEntidade->setUsuImagemPerfil('/application/sam/tests/Usuario/ImagemPerfil/sam.png');
$data = new \DateTime();
$usuarioEntidade->setCreatedAt($data->format('Y-m-d'));
return $usuarioEntidade;
}
我不知道如何模拟方法 "getQuery()"。 总是出现此错误: 错误:调用数组
上的成员函数 getQuery()代码中的问题是您的 createQUeryBuilder()
期望 return 是一个数组,而您正试图在该数组上调用一个函数。
您必须模拟一个 QueryBuilder
对象,并为其 getQuery()
函数设置一个预期,以 return 您想要的输出。当您为 DocumentManager createQueryBuilder()
函数设置预期时,必须 returned QueryBuilder mock。
像这样:
public function testObtendoTodosOsDados()
{
$output = $this->usuario();
$mockQueryBuilder = $this->prophesize(QueryBuilder::class); // Remember to import the proper QueryBuilder namespace
$mockQueryBuilder->getQuery()->willReturn($output)->shouldBeCalled();
$this->documento->createQueryBuilder(UsuarioEntidade::class)->willReturn($mockQueryBuilder)->shouldBeCalled();
$all = $this->repositorio->all();
$this->assertEquals($output, $all);
}