使用PHPUnit,我正在嘲笑pdo,但我正在尝试找到一种方法来准备多个数据库查询语句.
$pdo = $this->getPdoMock();
$stmt = $this->getPdoStatementMock($pdo);
$pdo->expects($this->any())
->method('prepare')
->with($this->equalTo($title_query))
->will($this->returnValue($stmt));
$title_stmt = $pdo->prepare($title_query);
$desc_stmt = $pdo->prepare($desc_query);
Run Code Online (Sandbox Code Playgroud)
我想传递一些类似onConsecutiveCalls的"with"方法,所以我可以准备多个语句,如上所示.你会怎么做呢?
谁能告诉我如何使用PHPUnit测试RESTful Web服务?PHPUnit似乎没有这种能力.
我目前正在开发一个存储敏感数据的项目,因此必须能够根据请求删除它们.
我想测试我的实体(患者)是否使用空电话号码保存到数据库中.首先要做的是:获取传递给的参数PatientDao::savePatient(PatientModel $patient),并查看其phoneNumber属性.
所以这是PatientDao界面:
interface PatientDao {
function savePatient(PatientModel $patient);
}
Run Code Online (Sandbox Code Playgroud)
以及我的测试文件中的代码:
$this->patientDao // This is my mock
->expects($this->once())
->method('savePatient'); // savePatient() must be called once
$this->controller->handleMessage(...);
$patient = ??; // How can I get the patient to make assertions with it ?
Run Code Online (Sandbox Code Playgroud)
我该怎么做,或者有没有其他方法可以确保患者使用空电话号码保存?
我很头疼PHPUnit的行为总是TRUNCATE在插入灯具之前一直运行而没有先设置外键检查:
Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint
基本上,PHPUnit尝试在插入fixture之前截断表.我怎么告诉它SET FOREIGN_KEY_CHECKS=0;?
我刚刚安装了最后一个版本的phpunit,当我运行演示测试时:
bin/phpunit src/Acme/DemoBundle/Tests/
Run Code Online (Sandbox Code Playgroud)
我遇到了这个问题:
1) Acme\DemoBundle\Tests\Controller\DemoControllerTest::testIndex
RuntimeException: Unable to guess the Kernel directory.
Run Code Online (Sandbox Code Playgroud)
以及内核被引用的行
关于为什么这个DEMO TEST不起作用的任何想法?
随着运行完成PHPUnit套件所需的时间增加,我们的团队开始怀疑是否有可能并行运行单元测试.最近我读了一篇关于Paraunit的文章,Sebastian Bergman也写道,他将在PHPUnit 3.7中添加并行性.
但是,集成测试仍然存在问题,或者更常见的是与DB交互的测试.为了保持一致性,必须重置testDB并在每次测试后加载夹具.但是在并行测试中,竞争条件存在问题,因为所有进程都使用相同的DB.
因此,为了能够并行运行集成测试,我们必须为每个进程分配自己的数据库.我想问一下,如果有人对如何解决这个问题有一些想法.也许在另一个xUnit实现中已经实现了这个问题的解决方案.
在我的团队中,我们使用的是MongoDB,因此一个解决方案是以编程方式为每个PHPUnit进程创建一个配置文件,并生成数据库名称(对于此过程),在setUp()方法中我们可以将主TestDb克隆到此临时数据库中.但在我们开始实施这种方法之前,我想问一下你对这个主题的看法.
php phpunit integration-testing unit-testing parallel-testing
刚刚跳进PHPUnit,一直在阅读有关它的内容,尝试一些例子,以便为我未来的项目编写测试.
我需要测试这个场景,我有Student Class,它是这样的:
class Students
{
public function getStudents($studentName, $studentId)
{
$students= array();
//Instantiating OldStudent Class from Old Project
$oldStudents = \OldStudents::getStudentByName($studentName, $studentId);
//Create a Student Object for every OldStudent found on Old Project and set
//values
foreach ($oldStudents as $oldStudent)
{
$student = new \Entity\Student();
//Set Student ID
$student->setStudentId($oldStudent->getStudentID());
//Set Student Name
$student->setStudentName($oldStudent->getStudentName());
//.....other setters for student data, irrelevant for this example
$students[] = $student;
}
return $students;
}
}
Run Code Online (Sandbox Code Playgroud)
和学生班
Class Student
{
protected $studentId;
protected $studentName;
public …Run Code Online (Sandbox Code Playgroud) 在PHPUnit中模拟一个接口时,PhpStorm在它被用作类型提示函数的参数时会抱怨.
例
interface InterfaceA{
}
class ClassA{
public function foo(InterfaceA $foo){}
}
class PhpStormTest extends PHPUnit_Framework_TestCase
{
public function testFoo(){
$mock = $this->getMock("InterfaceA");
$a = new ClassA();
$a->foo($mock);
}
}
Run Code Online (Sandbox Code Playgroud)
在$a->foo($mock);PhpStorm强调$mock警告Expected InterfaceA, got PHPUnit_Framework_MockObject_MockObject
图片
我猜它正在发生,因为PHPUnit创建了一个运行时模拟器,而PhpStorm无法知道它实际上是在实现接口.
我在测试用例中发送了一个post请求,并且我想断言一个特定的元素,假设在响应中存在键'x'.在这种情况下,我不能说seeJson(['x' => whatever]);因为我不知道这个价值.当然,我不能这样做seeJson(['x']);.
有办法解决这个问题吗?
如果重要:Laravel:v5.2.31 PHPUnit:5.3.4
我正在尝试使用Laravel的Passport测试身份验证,并且没有办法......总是收到该客户端的401无效,我会留下您尝试的内容:
我的phpunit配置是来自laravel的基础配置
abstract class TestCase extends BaseTestCase
{
use CreatesApplication, DatabaseTransactions;
protected $client, $user, $token;
public function setUp()
{
parent::setUp();
$clientRepository = new ClientRepository();
$this->client = $clientRepository->createPersonalAccessClient(
null, 'Test Personal Access Client', '/'
);
DB::table('oauth_personal_access_clients')->insert([
'client_id' => $this->client->id,
'created_at' => date('Y-m-d'),
'updated_at' => date('Y-m-d'),
]);
$this->user = User::create([
'id' => 1,
'name' => 'test',
'lastname' => 'er',
'email' => 'test@test.test',
'password' => bcrypt('secret')
]);
$this->token = $this->user->createToken('TestToken', [])->accessToken;
}
}
Run Code Online (Sandbox Code Playgroud)
class AuthTest extends TestCase
{
use …Run Code Online (Sandbox Code Playgroud) phpunit ×10
php ×7
unit-testing ×4
laravel ×2
testing ×2
json ×1
junit ×1
laravel-5 ×1
laravel-5.2 ×1
mocking ×1
mysql ×1
pdo ×1
phpstorm ×1
rest ×1
symfony ×1
symfony-2.2 ×1
type-hinting ×1