我正在测试工厂类.其中一个方法必须将数据加载到另一个方法将实例化的对象的数组中.
该方法包含SQL查询,该查询包含必须测试的严重条件.(在这种情况下,只询问"已发布"的记录.例如:WHERE published = 1).SQL Query中的这种区别是使该方法与另一种方法不同的唯一细节,我想测试查询执行行为.
现在,我无法模拟我的PDO对象并要求它返回一个固定的结果,因为我不会测试mySQL执行查询.这将是一个无用的测试.
这让我觉得我需要在其中设置一个带有固定测试数据的静态数据库.我是对的还是我错过了什么?
我应该将需要"测试数据库"的测试与自主测试分开吗?
所以我希望得到PHUnit,这样我就可以运行selenium服务器了,但是我已经意识到这可能永远不会发生在我身上.我已经尝试了很多不同版本的WAMP和XAMPP(我认为这不是我的问题)但我总是碰到一堵墙,其中有两种情况之一发生:
无法找到包,即:"没有可用于包的版本"pear.phpunit.de/File_Iterator"安装失败",我确实发现了所有正确的通道.
我完成了安装(另一种方式),最终出现了一个错误,例如"致命错误:在第60行的C:\ xampp\php\PEAR\PHPUnit\TextUI\TestRunner.php中找不到PHPUnit_Runner_BaseTestRunner" - 将'PHPUnit_Runner_BaseTestRunner'换成应该包含的任何其他文件.
令我难以置信的是因为缺乏一致性,不仅有PHPUnit而且还有梨.看起来我必须经历50个步骤,等待行星对准并在我的椅子上旋转十几次 - 顺时针......
抱歉咆哮 - 我的问题:
有没有一个简单,直接的教程来做这个,你们有成功吗?或者也许有一个tut + zip,我可以使用它来绕过pear安装并只是复制文件? - 因为似乎所有梨都在做.任何类型的服务器(Wamp,Xampp等)和版本都很好 - 我将执行全新安装,我不需要在该机器上运行任何其他东西,所以我想要的就是让它工作.
编辑:
所以我手动浏览了所有文件,并在需要它们的地方添加了require_once().然后我从http://pear.phpunit.de/下载了剩余的文件,并将它们放在所需的位置.没有错误!但现在当我运行'c:\ xampp\php> phpunit'时,没有任何反应!我只是得到另一个命令行 - 这也发生在我尝试运行类似'c:\ xampp\php> phpunit test1'之类的东西时,即使我不确定我需要存储test1.php文件的确切位置. ..
编辑2:
我很确定phpunit的.bat文件有问题,因为当我尝试运行任何命令(即:phpunit --help, - version等)没有任何反应时,我只是得到另一个命令行.我应该删除.bat文件和phpunit文件夹,然后重试?我还认为存在防火墙问题,因为我能够在不属于我公司域的不同机器上运行相同的命令.
目前我们运行代码来在setUpBeforeClass中设置数据库.但是,这会在测试每个测试类之前运行.是否可以在运行任何测试之前运行一次代码,并且在所有测试完成后也可以运行一些代码?
如何登录内部测试以便能够执行特定于用户的操作?
我正在尝试(很长一段时间,在PHP聊天室的fellas的帮助下)成功地将PHPUnit与PhpStorm集成.
我已将phpunit.xml文件设置如下:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
backupGlobals = "false"
backupStaticAttributes = "false"
colors = "true"
convertErrorsToExceptions = "true"
convertNoticesToExceptions = "true"
convertWarningsToExceptions = "true"
processIsolation = "false"
stopOnFailure = "false"
syntaxCheck = "false"
bootstrap = "bootstrap.php" >
<testsuites>
<testsuite name="Lamed Test Suite">
<directory>Custom/*</directory>
</testsuite>
</testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
并成功配置PHP风暴以从该文件中读取.
问题是,我在运行测试时在PhpStorm的控制台中收到以下错误:
D:\Websites\php\php.exe C:\fakepath\ide-phpunit.php --bootstrap D:\Websites\htdocs\lamed\tests\boostrap.php --configuration D:\Websites\htdocs\lamed\tests\phpunit.xml
Testing started at 23:51 ...
Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "Lamed Test Suite.php" nor "Lamed Test Suite.php" could be opened.' in …Run Code Online (Sandbox Code Playgroud) 因此,每当我在PHPUnit中遇到意外异常时(例如由于完整性检查而无法插入到db中),我的测试会失败,并且在没有运行tearDownAfterClass()函数的情况下会出错.这将使我的数据库处于凌乱的状态,因此我必须手动去清理它.有没有办法确保tearDownAfterClass()始终执行?
我正在尝试为我的小型框架应用程序编写一些PHPUnit测试,但是在文档中没有看到任何指向完整请求和断言响应的方法(包含文本或200状态,或者什么,真的).
有没有办法做到这一点,任何人都找到/使用过?
我有一个TestSuite,我需要将其标记为跳过(整个测试套件 - 而不是套件中的特定测试用例).
class AllTests
{
public static function suite()
{
// this does not work same as within TestCase:
// throw new \PHPUnit_Framework_SkippedTestError("Out of order");
$Suite = new \PHPUnit_Framework_TestSuite(__NAMESPACE__);
$Suite->addTestSuite(translators\AllTests::cls());
$Suite->addTestSuite(TlScopeTest::cls());
$Suite->addTestSuite(TlNsTest::cls());
$Suite->addTestSuite(TlElementTest::cls());
$Suite->addTestSuite(TlItemTest::cls());
$Suite->addTestSuite(LangCodeTest::cls());
$Suite->addTestSuite(TlElemClassTagTest::cls());
return $Suite;
}
}
Run Code Online (Sandbox Code Playgroud)
如你所见,抛出PHPUnit_Framework_SkippedTestError异常不起作用.它不会被PHPUnit捕获,并且会将执行中断为任何未捕获的异常(这是可以理解的,因为suite()在构建测试层次结构时,在实际运行测试之前调用该方法).
我见过一个名为的异常类PHPUnit_Framework_SkippedTestSuiteError,但不知道如何利用它.有任何想法吗?
我有一个TestSuite,它聚合了许多测试用例以及其他测试套件.几乎所有的测试都失败了,因为我在代码的核心部分做了一些改变.
问题是这个包不是重要的,并且计划在以后修复.在那之前,我必须为每个其他软件包运行测试,但是当我这样做时,PHPUnit输出会充满来自相关软件包的错误.这会强迫我每次检查是否有任何其他软件包发生故障.
正如您可能怀疑的那样,这很容易受到人为错误的影响,即我可能会错过一个实际上非常重要的失败.
我只能运行我目前正在使用的测试套件,但是我无法控制一个软件包中的更改是否导致其他软件包出现故障.
我不想评论那个测试套件,因为我担心我(或者会在我之后接管代码的人)可能完全忘记它.
我已经定义了需要在phpunit.xml中按顺序执行的Test文件列表.
根据http://phpunit.de/manual/3.7/en/organizing-tests.html#organizing-tests.xml-configuration,提到测试用例的顺序可以定义为:
<phpunit>
<testsuites>
<testsuite name="Object_Freezer">
<file>Tests/Freezer/HashGenerator/NonRecursiveSHA1Test.php</file>
<file>Tests/Freezer/IdGenerator/UUIDTest.php</file>
<file>Tests/Freezer/UtilTest.php</file>
<file>Tests/FreezerTest.php</file>
<file>Tests/Freezer/StorageTest.php</file>
<file>Tests/Freezer/Storage/CouchDB/WithLazyLoadTest.php</file>
<file>Tests/Freezer/Storage/CouchDB/WithoutLazyLoadTest.php</file>
</testsuite>
</testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
但似乎PHPUnit忽略了phpunit.xml中的配置并按字母顺序执行测试用例.
我想定义顺序只是因为我希望我的测试用例之一在最后执行.以下是我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
colors="true"
stopOnFailure="false"
forceCoversAnnotation="true"
bootstrap="../application/third_party/CIUnit/bootstrap_phpunit.php">
<testsuites>
<testsuite name="ModelTests">
<directory suffix=".php">models</directory>
<file>./models/aa.php</file>
<file>./models/bb.php</file>
<file>./models/cc.php</file>
<file>./models/dd.php</file>
<file>./models/ab.php</file>
<file>./models/ac.php</file>
</testsuite>
</testsuites>
<filter>
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">models</directory>
</whitelist>
</filter>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
当我执行phpunit时它打印:从/var/www/builds/latest/tests/phpunit.xml读取配置
任何的想法?
我对单元测试很新,但我已经阅读了很多关于phpunit.de的文档(直到第10章).
它指出使用数据库进行测试可能很慢,但如果设置正确,它可以与非数据库测试一样快.
因此,我想在Laravel中测试一个模型.我已经创建了一个模型工厂来将数据植入数据库.
我也创建了一个基本测试.
在PHPUnits文档中,它声明在每次测试之前,setUp()调用该方法来设置测试.还有另一种静态方法setUpBeforeClass().
我想只为我的数据库表播种一次,并使用我的测试中的记录.所以我使用Laravels factory()函数从setUpBeforeClass()方法中为数据库设定种子.
这是我的代码:
class CommentTest extends TestCase
{
protected static $blog;
protected static $comments;
public static function setUpBeforeClass()
{
parent::setUpBeforeClass();
self::$blog = factory(App\Models\Content\Blog::class)->create();
self::$comments = factory(App\Models\Content\Comment::class, 6)->create();
}
public function testSomething()
{
$this->assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时phpunit,我收到以下错误:
Fatal error: Call to a member function make() on a non-object in \vendor\laravel\framework\src\Illuminate\Foundation\helpers.php on line 54
Call Stack:
0.0002 240752 1. {main}() \vendor\phpunit\phpunit\phpunit:0
0.0173 1168632 2. PHPUnit_TextUI_Command::main() \vendor\phpunit\phpunit\phpunit:47 …Run Code Online (Sandbox Code Playgroud) phpunit ×10
php ×7
unit-testing ×3
factory ×1
install ×1
integration ×1
laravel ×1
laravel-5.1 ×1
mysql ×1
pear ×1
phpstorm ×1
selenium ×1
slim ×1
symfony ×1