我们正在寻找从phpundercontrol切换到Hudson(它看起来有一些非常酷的功能!)但我无法弄清楚如何让phpunit日志显示出来.
我使用ant在handson中运行phpunit,并且--log-xml将phpunit.xml放在该构建的相应构建/文件夹中.但是我无法弄清楚如何让它出现在构建中,以便我们可以看到运行的测试和失败的测试,如果有的话.
在我弄明白之后,获得覆盖率,指标和api将是下一个:)
对于任何在HTML上生成它的东西来说,似乎应该是微不足道的,告诉Hudson例如"为这个项目显示每个构建的'API'链接和构建/ $ BUILDNUM/api/index.html的链接".
我正在编写一些PHP代码来解析传入的URL.它严重依赖于PHP全局变量,如$_SERVER和$_GET.我想在PHPUnit单元测试setUp()功能中手动设置它们.有没有更好的方法呢?
我正在为一个类方法编写单元测试,该方法使用mock调用另一个类的方法,只需要调用的方法被声明为final,因此PHPUnit无法模拟它.我可以采取不同的方法吗?
例:
要被嘲笑的阶级
class Class_To_Mock
{
final public function needsToBeCalled($options)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试用例
class MyTest extends PHPUnit_Framework_TestCase
{
public function testDoSomething()
{
$mock = $this->getMock('Class_To_Mock', array('needsToBeCalled'));
$mock->expects($this->once())
->method('needsToBeCalled')
->with($this->equalTo(array('option'));
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果使用Mike B提供的解决方案,并且你有一个setter/getter用于你正在模拟的对象进行类型检查(为了确保将正确的对象传递给setter),你需要模拟getter on你正在测试的类,让它返回另一个模拟.
例:
要被嘲笑的阶级
class Class_To_Mock
{
final public function needsToBeCalled($options)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
嘲笑
class Class_To_MockMock
{
public function needsToBeCalled($options)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
要测试的课程
class Class_To_Be_Tested
{
public function setClassToMock(Class_To_Mock $classToMock)
{
...
}
public function getClassToMock()
{
...
}
public function doSomething() …Run Code Online (Sandbox Code Playgroud) 单元测试子类的最佳方法是什么?让我们假设有一个我已经编写过测试的基类,并且有一些子类会覆盖父公共和/或受保护方法中的一些父行为.
我的子类的测试类是否应该扩展(并在适当的情况下覆盖测试方法)我的基类的测试类,以便应用所有基类测试?否则,我希望有重复的测试代码.
在我的PHPUnit测试中,我想声明我正在测试的类扩展了另一个类.我怎么能用PHPUnit做到这一点?
有没有什么好方法可以使用PHPUnit在抽象类中模拟具体方法?
到目前为止我发现的是:
以下是一些单元测试,例如以上几点:
abstract class AbstractClass {
public function concreteMethod() {
return $this->abstractMethod();
}
public abstract function abstractMethod();
}
class AbstractClassTest extends PHPUnit_Framework_TestCase {
/**
* This works for abstract methods.
*/
public function testAbstractMethod() {
$stub = $this->getMockForAbstractClass('AbstractClass');
$stub->expects($this->any())
->method('abstractMethod')
->will($this->returnValue(2));
$this->assertSame(2, $stub->concreteMethod()); // Succeeds
}
/**
* Ideally, I would like this to work for concrete methods too.
*/
public function testConcreteMethod() {
$stub = $this->getMockForAbstractClass('AbstractClass');
$stub->expects($this->any())
->method('concreteMethod')
->will($this->returnValue(2)); …Run Code Online (Sandbox Code Playgroud) 我在使用xampp的Ubuntu服务器上安装xdebug时遇到问题.我知道在Stack Overflow中有几个关于这类问题的问题,但我找不到任何解决方案.
首先这是php --version命令的输出:
PHP 5.3.8 (cli) (built: Sep 19 2011 13:29:27)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
with Xdebug v2.2.0, Copyright (c) 2002-2012, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)
输出php --ini命令:
Configuration File (php.ini) Path: /opt/lampp/etc
Loaded Configuration File: /opt/lampp/etc/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
Run Code Online (Sandbox Code Playgroud)
输出php -m命令:
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo …Run Code Online (Sandbox Code Playgroud) 这就试图为一个类的方法编写一个测试,该类调用带闭包的mock方法.你如何验证被调用的闭包?
我知道你可以断言参数是一个实例Closure.但你怎么检查关闭的任何事情?
例如,如何验证传递的函数:
class SUT {
public function foo($bar) {
$someFunction = function() { echo "I am an anonymous function"; };
$bar->baz($someFunction);
}
}
class SUTTest extends PHPUnit_Framework_TestCase {
public function testFoo() {
$mockBar = $this->getMockBuilder('Bar')
->setMethods(array('baz'))
->getMock();
$mockBar->expects($this->once())
->method('baz')
->with( /** WHAT WOULD I ASSERT HERE? **/);
$sut = new SUT();
$sut->foo($mockBar);
}
}
Run Code Online (Sandbox Code Playgroud)
你无法比较PHP中的两个闭包.PHPUnit中有没有办法执行传入的参数或以某种方式验证它?
是否可以在同一个进程中运行一个phpUnit测试测试套件,但是确定要在自己的进程中运行的特定测试?
通常我用
@runTestsInSeparateProcesses
@preserveGlobalState disabled
Run Code Online (Sandbox Code Playgroud)
对于整个测试套件,但我只需要单独运行一个方法,并且我希望在单个进程中运行其余部分的速度提高.
谢谢
是否可以在PHPUnit中创建一个不存在的类的模拟?
假设我有一些类创建另一个类的实例,例如:
class TaskRunner
{
public function runTasks()
{
// Run through some loop to get tasks and store each in $taskName
// Get task instance by given task name
$task = $this->getTaskInstance($taskName);
if ($task instanceof AbstractTask) {
$task->run();
}
}
protected function getTaskInstance($taskName)
{
// Just an example
return new $taskName();
}
}
Run Code Online (Sandbox Code Playgroud)
我想运行单元测试runTasks方法来检查创建的任务实例是否扩展了一些抽象类.
是否有可能不在文件系统中创建样本类来检查继承约束?
谢谢大家!