我正在编写依赖于外部类exceptionManager的单元测试。我希望能够预测此类中的一些特定函数将返回什么,所以我使用了一个模拟对象。代码非常简单:$mockExceptionManager=$this->getMock('exceptionManager');问题是,我的异常管理器实现了IteratorAggregate接口(interface),它需要一个如下所示的方法:publicfunctiongetIterator(){returnnewArrayIterator($this->exceptions);}当我运行单元测试时,出现以下错误:Fatalerror:Cannot
我正在为类加载器编写一些单元测试,第一个测试是断言在不先加载类的情况下尝试引用类确实会失败。测试看起来像这样:/***@expectedExceptionPHPUnit_Framework_Error*/publicfunctiontestInstantiateUnloadedClass(){$foo=newFoo();}遗憾的是,运行测试会产生此消息:PHPFatalerror:Class'Foo'notfoundin/Users/jfvaren/workspace/classloader/ClassLoaderTest.phponline7我必须简单地接受这是不可行的吗?
我正在尝试为文件导入导出模块编写单元测试。我的一个方法检查传递的文件名是否存在。这将如何模拟并编写测试来检查文件是否存在? 最佳答案 单元测试应该证明一个代码单元在完全隔离中正常运行。如果您的测试依赖于文件系统的正常运行才能通过,那么您的测试就不是最优的,并且在任何给定的测试运行中都可能对您撒谎。与任何实验一样,当有多个变量在起作用时,您无法确定结果。对于与文件系统交互的PHP代码,最好使用自定义流包装器(通常为vfsStream,但如果您确实需要,也可以轻松编写自己的流包装器)来模拟文件系统。$noTest通常,这是通过将文件路径
我已经通过终端使用命令创建了一个测试:phpartisanmake:testUserTest现在我想使用以下命令运行测试:供应商/bin/UserTest但它返回bash:vendor/bin/UserTest:没有那个文件或目录PHPunit已安装。我检查过了。我错过了什么吗? 最佳答案 从Laravel根项目目录使用此命令运行测试:vendor/bin/phpunit如果你想运行自定义包测试,使用:vendor/bin/phpunitpackages/name/package/ 关于
我已经为单元测试编写了这段代码:assertInstanceOf($Collection,Collection::class);}}当我运行它时,我得到了这个错误:PHPUnit5.4.6bySebastianBergmannandcontributors.Runtime:PHP7.0.6-6+donate.sury.org~trusty+1Configuration:/var/www/project/phpunit.xmlE1/1(100%)Time:33ms,Memory:2.00MBTherewas1error:1)tests\CollectionTest::testIsColl
在Phpunit中有两种断言异常的方法:使用注解@expectedException使用方法调用$this->expectException()我都试过了,它们工作正常,完全一样。哪个是正确的方法?是否有关于应该使用哪一个的指南?PS:当异常基于某些条件并且并不总是发生时,显然应该使用该方法。 最佳答案 使用expectException()被认为是最佳实践,参见article. 关于PHPUnit使用注解断言异常与方法调用,我们在StackOverflow上找到一个类似的问题:
Laravel5.7工厂有什么进展?当我在phpartisantinker上运行工厂时,它工作正常。但是当我将它与单元测试一起使用时,它会抛出一个错误:Unabletolocatefactorywithname[default][App\User]这是我的单元测试user=factory(User::class,1)->create()->first();}/***@test*/publicfunctiona_sample_test(){$this->assertTrue(!empty($this->user));}}UserFactory是通过运行生成的phpartisanmake:
我正在编写一些广泛使用文件系统的对象。我不确定测试它们的正确方法是什么。我知道理论上我应该在某些对象中抽象文件系统功能然后模拟它们,但在我的情况下这毫无意义:我要测试的类的主要用途是管理文件。所以我在测试新对象时会遇到同样的问题,只是移动了一个级别。我认为进行测试的唯一方法是实际使用文件系统。问题是测试将同时在浏览器和命令行中运行,因此我需要在每个人都具有写入权限的目录中工作。此外,这似乎不是一个非常便携的解决方案。有什么想法吗? 最佳答案 您可以mockthefilesystemwithvfsStream作为suggestedin
我想为Session和Request创建一个包装器,这样我就不必直接访问PHPsuperglobals。我意识到,如果我为超全局变量创建一个包装器并使用它们,那么对我的应用程序进行单元测试会更容易,因为可以模拟包装器类。在尝试创建包装器类时,我研究了一些示例包装器类。其中一些在初始化时将超全局存储为类属性:classSession{protected$vars;publicfunction__construct(){session_start();//POINTOFINTEREST//Storethesuperglobalasaclassproperty$this->vars=$_SE
您如何管理项目中的PHPUnit文件?您是将它添加到您的git存储库还是忽略它们?您是否在PHPdocs代码中使用了@assert标签? 最佳答案 设置我目前没有使用php,但我正在使用pythonunittesting和sphinxdocumentation在混帐。我们将测试添加到git,甚至对推送到远程devel和master分支的测试通过有一定的要求(master比开发)。这保证了一点代码质量(测试覆盖率也应该被评估,但那还没有实现:))。我们有testfilesinaseparatedirectorynexttothetop