我用PHP运行Selenium RC.我运行一个简单的登录测试,成功完成,但在关闭浏览器之前,我收到以下错误:
23:50:09.969 INFO - 命令请求:testComplete [,]在会话d7a1effeabc24b0b9b46ad6fdb3eebec 23:50:09.969信息 - 杀死谷歌Chrome ... 23:50:10.286信息 - 得到结果:确定会话d7a1effeabc24b0b9b46ad6fdb3eebec 23:50:10.349 INFO - 命令请求:getLocation [,] on session null 23:50:10.351 ERROR - 在会话上运行'getLocation'命令的异常null.java.lang.OullPointerException:sessionId不应为null; 这个会议已经开始了吗?在Org.openqa.selenium.server.SeleniumResourceHandler的org.openqa.selenium.server.commands.SeleniumCoreCommand.execute(SeleniumCoreCommand.java:34)上的org.openqa.selenium.server.FrameGroupCommandQueueSet.getQueueSet(FrameGroupCommandQueueSet.java:216) .doCommand(SeleniumDriverResourceHandler.java:562)org.openqa.selenium.java:357)at org.openqa.jetty.util.ThreadPool $ PoolThread.run(ThreadPool.java:534)23:50:10.364 INFO - 得到的结果:ERROR服务器异常:sessionId不应为null; 这个会议已经开始了吗?在会话上null
我找不到解决办法......请帮忙.
我使用以下命令在我的OS X Snow Leopard盒子上安装了PHPUnit:
sudo pear channel-discover pear.phpunit.de
sudo pear install phpunit/PHPUnit
Run Code Online (Sandbox Code Playgroud)
我希望在此之后phpunitCLI命令可用,但事实并非如此.我已经查看了/usr/local/bin,/usr/lib/php/PHPUnit但找不到任何看起来像CLI的东西.
任何人都可以告诉我如何启动和运行CLI?
我想要通过测试得到以下内容:"此测试没有执行任何断言"
我知道我可以添加类似assertTrue(true)的内容但是是否可以在配置中添加一些东西以使这些测试通过?
我很确定这只发生在PHPUnit 3.5.0版本之后,引入了--strict
我在phpunit.xml文件中有这个:
<phpunit ...>
<testsuites>
<testsuite name="MyTests">
<directory>../path/to/some/tests</directory>
</testsuite>
</testsuites>
... // more settings for <filter> and <logging>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
当我去运行它时,我收到此错误:
PHP fatal error: Uncaught exception 'PHPUnit_Framework_Exception'
with message 'Neither "MyTests.php" nor "MyTests.php" could be opened.'
Run Code Online (Sandbox Code Playgroud)
为什么PHPUnit会给我这个错误,如果我给它一个查找测试的目录,它为什么要查找"MyTests.php"?
在相关的说明中,当我<testsuite>使用其他测试添加更多条目时,PHPUnit运行时没有错误.那是怎么回事?
我已经掌握了PHPUnit,并且到目前为止发现它很容易使用,但是我遇到了一个导致我遇到困难的测试用例.
我正在编写针对一组接口的代码,这些接口需要实现对象(一些PHP,一些是自制的),而SUT需要一个输入对象来实现多个接口.例如:
class MyClass implements ArrayAccess, MyInterface
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
SUT做的事情如下:
class ClassToBeTested
{
protected $obj = NULL;
public function __construct ($obj)
{
$this -> obj = $obj;
}
public function methodToBeTested ()
{
if ($this -> obj instanceof ArrayAccess)
&& ($this -> obj instanceof MyInterface)
{
// ...
}
}
public function otherMethodUnderTest ()
{
if ($this -> obj instanceof ArrayAccess)
{
// ...
}
else
if ($this -> obj instanceof MyInterface)
{
// ...
}
}
} …Run Code Online (Sandbox Code Playgroud) 响应是JSON,我使用的是定制的MVC框架,我不确定如何生成请求和响应过程.使用以下语法创建服务方法.
public function getSessionsMethod()
{
// data auto encoded as JSON
return array('hello', 'world');
}
Run Code Online (Sandbox Code Playgroud)
JavaScript的请求看起来像这样/svc/api/getSessions.我最初的想法是简单地使用流方法是否有这种形式的测试的最佳实践?
public function testCanGetSessionsForAGivenId()
{
$params = http_build_query(
array(
'id' => 3,
)
);
$options = array(
'http' => array(
'method' => 'GET',
'content' => $params,
)
);
$context = stream_context_create($options);
$response = file_get_contents(
'http://vbates/svc/api/getSessions', false, $context
);
$json = json_decode($response);
$this->assertEquals(3, $json->response);
}
Run Code Online (Sandbox Code Playgroud) 例如,该操作在test1外部存储数据*test2然后执行断言,但tearDown删除该数据从而中断test2.无法删除缓存删除,tearDown因为其他测试依赖于它.这个问题是询问是否有办法在保持功能的同时跳过依赖情况之间的setUp/tearDown @depends(如果第一次测试失败而不是第二次测试失败,则跳过第二次测试).
public function tearDown() {
// delete cache
}
// verify the expected data was retrieved from an uncached source
public function test1() {
$sut = new SystemUnderTest();
$data = $sut->getDataAndCache();
$this->assertEquals('expected', $data);
return $sut;
}
// verify the expected data was cached
/** @depends test1 */
public function test2($sut) {
$this->assertEquals('expected', $sut->getCache());
}
Run Code Online (Sandbox Code Playgroud)
*我们称之为集成测试,因为它们与外部系统交互.
有时,IntelliJ IDEA在运行,调试或显示PHPUnit测试的代码覆盖率方面存在问题.当它生成的类与您拥有的PHPUnit版本不兼容时,可能会发生这种情况.
就我而言,它是IntelliJ IDEA 12.1.6而不是PHPUnit 4.0.14,它始终因此消息而失败:
/usr/bin/php /tmp/ide-phpunit.php --configuration /home/username/Documents/stuff/phpunit.xml.dist
Testing started at 5:32 PM ...
PHP Fatal error: Class IDE_PHPUnit_Framework_TestListener contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addRiskyTest) in /tmp/ide-phpunit.php on line 496
PHP Stack trace:
PHP 1. {main}() /tmp/ide-phpunit.php:0
Process finished with exit code 255
Run Code Online (Sandbox Code Playgroud)
它生成的代码/tmp/ide-phpunit.php不包含PHPUnit 4.x所需的新方法.
事情我已经试过了不工作:
我正在尝试使用Laravel项目的Vagrant框在Windows 10上的PhpStorm 2017.1中设置PHPUnit.我已经设置了一个远程口译员,我已经使用它几个月了,一切正常.
我被要求进行一些单元测试,所以我按照我的同事的指示(Mac上的PhpStorm)设置了PHPUnit的PhpStorm但是当我autoload.php在我的供应商文件夹中选择时,我收到了错误消息
"无法解析PHPUnit版本输出:无法打开输入文件:
/vagrant/vendorphpunitphpunitphpunit"(无斜线).
如果我vagrant ssh在命令行中运行PHPUnit ,我的测试执行正常,我可以在PhpStorm中手动选择PHPUnit phar,但后来我错过了自动加载的类,所以一切都失败了.
要在类似的工具PHPMD和PHPCS中进行上下文,可以为结果输出指定自定义格式化程序,例如:
PHPMD:
vendor/bin/phpmd test \\my\\namespace\\renderers\\phpmd\\AdamFormat phpmd.xml
Run Code Online (Sandbox Code Playgroud)
PHPCS:
vendor/bin/phpcs --standard=phpcs.xml --report=./src/renderers/phpcs/AdamFormat.php
Run Code Online (Sandbox Code Playgroud)
我希望为PHPUnit做同样的事情,但是因此得到了一个空白(调查,谷歌搜索,在这里搜索).看看PHPUnit的代码,这对我来说似乎有点硬编码:
if (isset($arguments['coverageClover'])) {
$this->printer->write(
"\nGenerating code coverage report in Clover XML format ..."
);
try {
$writer = new CloverReport;
Run Code Online (Sandbox Code Playgroud)
记录:
if (isset($arguments['testdoxHTMLFile'])) {
$result->addListener(
new HtmlResultPrinter(
Run Code Online (Sandbox Code Playgroud)
我没有发现文档中的任何其他地方.对我来说似乎是一个奇怪的缺陷.
所以有两个问题:
我意识到可以使用该--coverage-php选项将结果作为PHP变量输出到另一个进程然后利用来做[无论如何],但这对我来说似乎是一种由内而外的方法,并且属于Heath Robinson类别.