我目前正在开发一个存储敏感数据的项目,因此必须能够根据请求删除它们.
我想测试我的实体(患者)是否使用空电话号码保存到数据库中.首先要做的是:获取传递给的参数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;?
有没有任何简单的PHP测试框架,可能比simpletest更简单,而不是像PHPUnit那样基于命令行?
我没有得到如何使用PHPUnit对异常进行单元测试.
请参阅我的方法与异常:
public function getPhone($html, $tag = 'OFF', $indicative, $number_lenght) {
// .. code
if ($tag <> 'OFF') {
$html = $doc[$tag]->text(); // Apanho apenas o texto dentro da TAG
if (empty($html)) {
throw new Exception("Nao foi possivel apanhar qualquer texto dentro da TAG, Metodo em causa: getPhone()");
}
}
// .. code
}
Run Code Online (Sandbox Code Playgroud)
现在我的PHPUnit测试:
<?php
require_once '../Scrap.php';
class ScrapTest extends PHPUnit_Framework_TestCase
{
protected $scrap;
// Setup function to instantiate de object to $this->scrap
protected function setUp()
{
$this->scrap = …Run Code Online (Sandbox Code Playgroud) 我正在使用较旧版本的PHPUnit(3.4)编写单元测试,因此无法使用3.5和3.6手册中列出的所有支持的断言.虽然我可以在我的环境中重新设置测试以获得即时支持,但我想让我的测试依赖于当前版本的PHPUnit,所以只要我或任何其他人的测试环境提供PHPUnit 3.5+,它就会使用assertsInstanceOf() .
我以为会有一些由PHPUnit自动定义的常量,但是我找不到任何关于它的文档.
在调用命令行时,有没有办法实现这一点而不需要定义常量?
我正在编写一个将继承接口的类.将为该接口编写客户端代码,并编写用于支持它的类.我的想法是稍后我将为该接口编写其他类,这两个不同类的对象应该是完全可互换的.我没有为第一个类编写测试类,而是想为接口编写一个.
我的计划是编写一个测试类,它将为构造函数(依赖注入)获取工厂对象,并使用工厂创建被测试类的新实例.
这样,如果我想测试ClassA,我可以将ClassAFactory对象传递给测试类的构造函数,如果我想测试ClassB,我会传递一个ClassBFactory对象.这两个类都是可以互换的,因为只有公共方法应该被测试,这似乎是理想的.
但是测试构造函数呢?我是否会更好地编写一个抽象的测试类,并在继承抽象测试类的类中实现构造函数测试(不同的类可能以不同的方式实例化)?
如果我确实使用了第一个想法,我想我会测试每个被测试的类,例如:
class ClassATest extends [PHPUnit test case]
{
$myFactory = new ClassAFactory();
$myTest = new ClassTest($myFactory);
$myTest->test1();
$myTest->test2();
//etc.
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我想要进行一般性测试,这样当我编写新类来实现公共接口时,我可以只使用与其他测试相同的测试对象.但是,看到不同的类会有不同的构造函数,或许编写一个抽象的测试类并为每个新对象扩展它会更好吗?你怎么看?
我如何单元测试ContainsItalianVatinValidator自定义验证器,但w*不访问容器*和validator服务(从而创建存根对象)?
class ContainsItalianVatinValidator extends ConstraintValidator
{
/**
* @param mixed $value
* @param \Symfony\Component\Validator\Constraint $constraint
*/
public function validate($value, Constraint $constraint)
{
if (!preg_match('/^[0-9]{11}$/', $value, $matches)) {
$this->context->addViolation($constraint->message, array(
'%string%' => $value
));
}
// Compute and check control code
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试用例中,我知道我应该访问ConstraintViolationList,但我不知道如何从验证器本身做到这一点:
class ContainsItalianVatinValidatorTest extends \PHPUnit_Framework_TestCase
{
public function testEmptyItalianVatin()
{
$emptyVatin = '';
$validator = new ContainsItalianVatinValidator();
$constraint = new ContainsItalianVatinConstraint();
// Do the validation
$validator->validate($emptyVatin, $constraint);
// …Run Code Online (Sandbox Code Playgroud) 我试图在TDD之后开始一个新的Laravel应用程序
我的第一步是检查主页上是否调用了/ login控制器.
尽管遵循了几个教程我无法让测试工作,但我根本无法看到我做错了什么.
我的设置是:作曲家安装laravel composer来安装phpunit
这是我的路线:
<?php
Route::get('/login', 'AuthenticationController@login');
Run Code Online (Sandbox Code Playgroud)
我的控制器:
<?php
class AuthenticationController extends BaseController {
public function login () {
return View::make('authentication.login');
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试:
<?php
class AuthenticationTest extends TestCase {
public function testSomeTest () {
$response = $this->action('GET', 'AuthenticationController@login');
$view = $response->original;
$this->assertEquals('authentication.login', $view['name']);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
ErrorException: Undefined index: name
Run Code Online (Sandbox Code Playgroud)
代码作为一个副本(几乎完全)来自Laravel网站,但它没有运行.
谁能看到我做错了什么?
它声称$ view没有索引名称,但这不能正确,因为它在laravel网站上的示例,加上视图正在使用其名称呈现(它也在前端正确显示)
编辑::
因此,从评论中可以看出,laravel单元测试部分不清楚,$ view ['name']正在检查名为$ name的变量.如果是这种情况,您如何测试使用的控制器/路由,IE.什么控制器名称/操作名称已用于路由('X')
我刚刚安装了一个新的Laravel 5项目,这是我在这个版本上的第一个项目.PHPUnit应该是开箱即用的框架和我看到的每个教程只是phpunit在项目文件夹中键入以启动单元测试.
我检查过,PHPUnit在composer.json,我也做了一个composer install,composer update以防万一它不会在这里
website(master)$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Removing phpunit/phpunit (4.6.1)
- Installing phpunit/phpunit (4.6.2)
Downloading: 100%
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用根本不phpunit被认可
website(master)$ phpunit
-bash: phpunit: command not found
Run Code Online (Sandbox Code Playgroud)
似乎没有人在谷歌搜索之前就遇到过这个问题.我希望我没有犯任何愚蠢的错误.有什么想法或建议吗?多谢你们 ;)
我试图在一些PHPUnit测试用例中的每次测试之前重新创建数据库.我正在使用Laravel 5.3.这是TestCase:
class CourseTypesTest extends TestCase
{
public function setUp()
{
parent::setUp();
Artisan::call('migrate');
Artisan::call('db:seed', ['--class' => 'TestDatabaseSeeder ', '--database' => 'testing']);
}
/**
* A basic functional test example.
*
* @return void
*/
public function test_list_course_types()
{
$httpRequest = $this->json('GET', '/api/course-types');
$httpRequest->assertResponseOk();
$httpRequest->seeJson();
}
public function tearDown()
{
Artisan::call('migrate:reset');
parent::tearDown();
}
}
Run Code Online (Sandbox Code Playgroud)
运行phpunit失败并显示错误:
由Sebastian Bergmann和贡献者提供的$ phpunit PHPUnit 5.7.5.
E 1/1(100%)
时间:2.19秒,内存:12.00MB
有1个错误:
1)CourseTypesTest :: test_list_course_types ReflectionException:类TestDatabaseSeeder不存在
D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:749 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Container\Container.php:644 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Foundation\Application.php:709 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php:74 D:\ www\learn-laravel\my-folder-api\vendor\laravel\framework\src\Illuminate\Database\Console\Seeds\SeedCommand.php:63 D:\ …
phpunit ×10
php ×8
unit-testing ×3
laravel-5 ×2
laravel ×1
laravel-4 ×1
mocking ×1
mysql ×1
oop ×1
simpletest ×1
symfony ×1
symfony-2.1 ×1