gpt4 book ai didi

phpunit:运行单个测试时通过,运行所有测试时失败

转载 作者:可可西里 更新时间:2023-10-31 23:48:06 25 4
gpt4 key购买 nike

当我只执行这个测试时,我遇到了一个特定测试运行的问题。当我一起运行所有测试时,此测试失败。从 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): 无法打开流:没有那个文件或目录

不过这个文件夹是之前创建的。这里值得注意的是,关于复制语句的错误仅显示第二个参数,而不是此参数周围没有引号。

最佳答案

我找到了解决方案,这要归功于我在用户@AD7six 和@Lilshieste 的最新评论后添加的一些额外的调试语句。

为了创建目标文件夹,我使用了以下命令:

$targetLink = '../'.FolderDefine::GetFolder('TRH_RequirementLink', $dbName).$trhVersionID.'/'.$reqID.'/';
FileUtil::MKDirs($targetLink);

这意味着创建了以下文件夹:../../../DTSfiles/TRHUtilTest/trh/reqs/3/1/

但是,应该是:

$targetFolder = FolderDefine::GetFolder('TRH_RequirementFile', $dbName).$trhVersionID.'\\'.$reqID.'\\';
FileUtil::MKDirs($targetFolder);

对应文件夹:D:\Inetpub\wwwroot\DTSfiles\TRHUtilTest\trh\reqs\3\1\

由于运行这个单元测试的开始位置不同,因为所有测试所在的根文件夹不同(root-test-folder 是两个目录级别)目标文件夹确实已创建,但在错误的级别。

感谢大家的支持

关于phpunit:运行单个测试时通过,运行所有测试时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23175581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com