테스트가 많이 있지만 실제로 테스트 한 일부 오브젝트가 실패하고 그 이유를 모르겠습니다. 간단한 테스트에서 코드를 단계별로 실행하면 테스트하려는 내용이 정의되어 있지만 PHPUnit이 테스트에 실패 함을 알 수 있습니다.내부 배열이 설정된 경우 PHPUnit 테스트가 실패합니다.
너무 작은 잡음없이 문제를 설명하기 위해 아래에 편집 된 작은 코드 샘플이 있습니다.
클래스 정의의 매우 간단한 하위 집합입니다.
class UTIL_CATEGORY_SCOPE extends UTIL_MESSAGE_DATA
{
function __construct($CategoryNo = NULL, $CategoryName = NULL)
{
$this->DeclareClassFields_();
$this->CategoryName = $CategoryName;
$this->CategoryNo = $CategoryNo;
}
private function DeclareClassFields_()
{
$this->Fields['CategoryNo'] = new UTIL_ICAP_FIELD('CCL', 6, 'Category', 8);
$this->Fields['SubCategoryNo'] = new UTIL_ICAP_FIELD('SCC', 6, 'Sub-Category', 12);
$this->Fields['SubSubCategoryNo'] = new UTIL_ICAP_FIELD('SSC', 6, 'Sub-Sub-Category', 12);
}
}
정상적인 코드는 Netbeans 디버거에서 작동합니다.
$Category = new UTIL_CATEGORY_SCOPE();
PHPUnit 테스트 샘플 비교를위한 덤프 내용입니다.
var_dump($Category);
class UTIL_CATEGORY_SCOPE#1 (4) {
public $TheMessage_ =>
class MESSAGE_DATA#2 (0) {
}
괜찮습니다. InstanceOf 클래스를 테스트하고 올바르게 전달할 수 있기를 기대하고 작동합니다.
내부적으로 클래스 객체의 배열이며 get/set 값 등의 마법 메서드를 사용하는 배열의 필드 목록이 있습니다. 배열이 초기화 되었습니까?
var_dump($Category->Fields);
array(3) {
'CategoryNo' =>
class UTIL_ICAP_FIELD#3 (14) {
public $FieldCode =>
string(3) "CCL"
public $FieldLength =>
int(6)
public $FieldTitle =>
string(8) "Category"
}
'SubCategoryNo' =>
class UTIL_ICAP_FIELD#4 (14) {
public $FieldCode =>
string(3) "SCC"
public $FieldLength =>
int(6)
public $FieldTitle =>
string(12) "Sub-Category"
}
'SubSubCategoryNo' =>
class UTIL_ICAP_FIELD#5 (14) {
public $FieldCode =>
string(3) "SSC"
public $FieldLength =>
int(6)
public $FieldTitle =>
string(16) "Sub-Sub-Category"
}
}
배열이 예상대로 초기화됩니다.
배열이 존재하고 개별 항목에 액세스 할 수 있는지 확인하십시오.
if (array_key_exists('CategoryNo', $Category->Fields))
echo 'Array Key Exists';
Array Key Exists
if($Category->Fields['CategoryNo'] instanceof UTIL_ICAP_FIELD)
echo 'Yes';
Yes
모두 예상대로보고됩니다. 부분
phpunit을 시험 예상대로
class TEST_UTIL_CATEGORY_SCOPE extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testObjectCreation()
{
$CategoryInfo = new UTIL_CATEGORY_SCOPE();
$this->assertInstanceOf('UTIL_CATEGORY_SCOPE', $CategoryInfo);
$this->assertInstanceOf('UTIL_DATA_STRUCTURE', $CategoryInfo);
}
public function testConstructFieldOrder()
{
$CategoryInfo = new UTIL_CATEGORY_SCOPE(1500, 'Category Name');
$this->assertEquals(1500, $CategoryInfo->CategoryNo);
$this->assertEquals('Category Name', $CategoryInfo->CategoryName);
}
/**
*
*/
public function testConstructDefaults()
{
$CategoryInfo = new UTIL_CATEGORY_SCOPE();
$this->assertNull($CategoryInfo->CategoryNo);
$this->assertNull($CategoryInfo->CategoryName);
}
이러한 테스트는 통과. 그러나 위의 정보 덤프를 감안할 때 테스트 실행 및 var_dump가 값이 초기화되고 예상대로 표시 되었음에도 불구하고 다음 2 가지 테스트가 실패합니다.
public function testFieldsCreated()
{
$CategoryInfo = new UTIL_CATEGORY_SCOPE();
$this->assertArrayHasKey('CategoryNo', $CategoryInfo->Fields);
$this->assertArrayHasKey('SubCategoryNo', $CategoryInfo->Fields);
$this->assertArrayHasKey('SubSubCategoryNo', $CategoryInfo->Fields);
}
오류 만든 :
1) TEST_UTIL_CATEGORY_SCOPE::testFieldsCreated
Failed asserting that an array has the key 'CategoryNo'.
다음 테스트
public function testICAPFieldTypes()
{
$CategoryInfo = new UTIL_CATEGORY_SCOPE();
$this->assertInstanceOf('UTIL_ICAP_FIELD', $CategoryInfo->Fields['CategoryNo']);
$this->assertInstanceOf('UTIL_ICAP_FIELD', $CategoryInfo->Fields['SubCategoryNo']);
$this->assertInstanceOf('UTIL_ICAP_FIELD', $CategoryInfo->Fields['SubSubCategoryNo']);
}
을 오류 만든 :
2) TEST_UTIL_CATEGORY_SCOPE::testICAPFieldTypes
Failed asserting that null is an instance of class "UTIL_ICAP_FIELD".
내가 때 내가 할 수있는이 오류가 발생으로 계속하는 방법을 잘 모르겠습니다 그 물건들이 크레아인지 확인해. 테드, 내가 예상했던대로 배열 채워집니다. 테스트 스위트를 계속 사용하려면이 테스트를 지금은 불완전한 것으로 표시해야합니다.
누구에게 아이디어가 있습니까?
받고있는 오류 메시지는 무엇입니까? 그 클래스는 언제든지 이름 공간을 차지합니까? – edorian
아니요. 우리는 PHP 5.3.17과 PHPUnit 3.6.10을 테스트 중입니다. 그러나 우리 릴리스 코드는 실제로 PHP 5.2.17에서 실행되기 때문에 이름 공간이 없습니다. 생성 된 오류를 포함하도록 설명을 업데이트했습니다. –