如何创建扩展PHPUnit_Framework_TestCase的基类并将其用于子类化实际测试用例,而不需要PHPUnit对基类本身进行测试?
我有一系列相关的测试用例,我已经为其创建了一个基类,其中包含了所有测试用例都要继承的常见测试:
BaseClass_TestCase.php:
class BaseClass_TestCase extends PHPUnit_Framework_TestCase {
function test_common() {
// Test that should be run for all derived test cases
}
}
MyTestCase1Test.php:
include 'BaseClass_TestCase.php';
class MyTestCase1 extends BaseClass_TestCase {
function setUp() {
// Setting up
}
function test_this() {
// Test particular to MyTestCase1
}
}
MyTestCase2Test.php:
include 'BaseClass_TestCase.php';
class MyTestCase2 extends BaseClass_TestCase {
function setUp() {
// Setting up
}
function test_this() {
// Test particular to MyTestCase2
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我尝试在文件夹中运行所有测试时,它会失败(没有输出).
试图调试我发现问题在于基类本身是PHPUnit_Framework_TestCase的子类,因此PHPUnit也会尝试运行它的测试.(在那之前,我天真地认为只有在实际测试文件中定义的类 - 以Test.php结尾的文件名 …
我正在使用cURL从PHP调用服务,如下所示:
$response = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)
并且请求/响应标头看起来像这样:
请求:
POST /item/save HTTP/1.1
Host: services.mydomain.com
Accept: */*
Content-Length: 429
Expect: 100-continue
Content-Type: multipart/form-data
Run Code Online (Sandbox Code Playgroud)
响应:
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Fri, 06 Jul 2012 08:37:01 GMT
Server: Apache
Vary: Accept-Encoding,User-Agent
Content-Length: 256
Content-Type: application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
其次是身体(json编码数据).
问题是常见的事情是在遇到第一个空行的情况下将响应中的标题和正文分开,除非在这种情况下,空行在之后100 Continue,因此其他所有内容都被推入正文 - 这是无效的json再也:-)
所以我的问题是:解决这个问题的常用方法是什么?我有3个选项排成一行:
100-continue?(怎么样?)100 Continue标题并忽略它们及其后面的空行?(在这种情况下,还有其他可能发生的类似事情,我应该手动检查吗?)除非我遗漏了一些明显的东西,否则我肯定人们偶然发现了这个问题并多次解决了!
我正在尝试实例化动态创建的类名的对象.我正在使用名称空间,我要实例化的类位于同一名称空间中.
举例来说,这很好:
namespace MyNamespace;
new MyClass; // MyNamespace\MyClass instantiated
Run Code Online (Sandbox Code Playgroud)
然而,这不是:
namespace MyNamespace;
$class = 'MyClass';
new $class; // Class 'MyClass' not found
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我做错了什么?
我正在使用history.js,我有一个事件处理程序
$(window).bind('statechange', function(){
// Loads the content representing the state via ajax
});
Run Code Online (Sandbox Code Playgroud)
History.pushState([...])用户单击链接或按钮时会触发大多数内容更改.
但在某些情况下,内容更改由javascript直接管理(即通过更改,添加或删除DOM元素),并且不需要通过ajax加载表示新状态的内容.
仍然,我需要推送状态并更改URL以反映新状态,如果用户点击重新加载或稍后想要使用后退按钮等.
所以我的问题是:如何推送状态但在某些情况下避免加载内容?是否有一种可以传递给statechange事件处理程序的标志,还是我可以完全绕过它?
我有这个字符串,它是由dojo.toJson()函数生成的:
{"page":"accommodation task=viewList","language":undefined}
Run Code Online (Sandbox Code Playgroud)
当用php中的json_decode对其进行解码时,它返回null.
我已经发现这是由未定义的值引起的,但我不确定这是否是预期的,或者它是否是一个bug.上面的字符串是无效的json吗?为什么php不能将undefined转换为null?
我使用的是PHP 5.2.10
php ×4
ajax ×1
base-class ×1
curl ×1
dojo ×1
history.js ×1
http-headers ×1
javascript ×1
jquery ×1
json ×1
namespaces ×1
phpunit ×1
subclassing ×1
unit-testing ×1
web-services ×1