我遇到了这样的问题:当我只运行这个测试时,它可以正常运行。但是当我将所有测试一起运行时,这个测试就会失败。从NetBeans或命令行中运行都会得到相同的结果。
与套件中其他测试不同的是,这个测试从资源文件夹中获取一个文件,然后将它复制到一个测试文件夹中(该文件夹在测试开始时创建,在结束时销毁)。
我曾认为这可能是相对路径或绝对路径的问题,但当我输出源路径和目标路径时,它们是相同的。
这是有问题的代码(在复制语句上失败):
public function testRemoveRequirementFileValid()
{
$dbName = 'TRHUtilTest';
$reqID = 1;
$userID = 14;
$trhVersionID = 3;
//create the database
DBCreator::CreateProjectDatabaseAndTables($dbName);
DB::setConnectionInfo($dbName);
$fileName = 'example.png';
$sourceFolder = dirname(__FILE__).'\TRHUtilResources\\';
$targetLink = '../'.FolderDefine::GetFolder('TRH_RequirementLink', $dbName).$trhVersionID.'/'.$reqID.'/';
FileUtil::MKDirs($targetLink);
$targetFolder = FolderDefine::GetFolder('TRH_RequirementFile', $dbName).$trhVersionID.'\\'.$reqID.'\\';
//2 debugging statements
print PHP_EOL.'Source Folder: '.$sourceFolder.PHP_EOL;
print PHP_EOL.'Target Folder: '.$targetFolder.PHP_EOL;
copy($sourceFolder.$fileName, $targetFolder.$fileName);
$file = new File();
$file->setName($fileName);
$file->setLocation($targetLink);
$file->save();
$fileID = $file->getID();
//create the link between a requirement and a file
TRHUtil::RequirementFileLink($reqID, $fileID, $userID);
//assert that there is one record, then check the structure and then the contents
$this->assertEquals(1, DB::getRecordCount($dbName.'.files_reqs'));
$this->assertEquals(1, TRHUtil::RequirementFileLinkPresent($reqID, $dbName));
$this->assertEquals(1, TRHUtil::RequirementFileLinkCheck($reqID, $fileID, $dbName));
$this->assertEquals(1, count(TRHUtil::GetRequirementFileLinkID($reqID, $dbName)));
TRHUtil::RemoveRequirementFile($reqID, $dbName, $trhVersionID);
//assert that the records about this file are removed and that the folder where the file was staying is also removed
$this->assertEquals(0, DB::getRecordCount($dbName.'.files_reqs'));
$this->assertEquals(0, TRHUtil::RequirementFileLinkPresent($reqID, $dbName));
$this->assertEquals(0, TRHUtil::RequirementFileLinkCheck($reqID, $fileID, $dbName));
$this->assertEquals(0, TRHUtil::GetRequirementFileLinkID($reqID, $dbName));
$this->assertEquals(0, is_dir($targetFolder));
//remove the project folder
$projectFolder = FolderDefine::GetFolder('ProjectRoot', $dbName);
FileUtil::RRMDir($projectFolder);
}
调试语句随后输出:
Source Folder: D:\Inetpub\wwwroot\DTS\tests\util\TRHUtilResources\
Target Folder: D:\Inetpub\wwwroot\DTSfiles\TRHUtilTest\trh\reqs\3\1\
在NetBeans的输出窗口中,我还看到了以下内容:
copy(D:\Inetpub\wwwroot\DTSfiles\TRHUtilTest\trh\reqs\3\1\example.png): failed to open stream: No such file or directory
。然而,这个文件夹已经被创建了。值得注意的是,有关复制语句的错误只显示第二个参数,并且没有引号包围该参数。