Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何对CGI.pm和x27进行单元测试;s文件上传?_Perl_Cgi_Mime - Fatal编程技术网

Perl 如何对CGI.pm和x27进行单元测试;s文件上传?

Perl 如何对CGI.pm和x27进行单元测试;s文件上传?,perl,cgi,mime,Perl,Cgi,Mime,我有一个CGI,它上传了一个文件,并用它做了一些事情 我想对fileupload功能进行单元测试 读后 我试图修改CGI.pm的t/upload.t { %ENV = ( %ENV, 'SCRIPT_NAME' => '/data.cgi', 'SERVER_NAME' => 'localhost', 'HTTP_CONNECTION' => 'TE, close', 'REQUEST_METHOD' => 'POST',

我有一个CGI,它上传了一个文件,并用它做了一些事情

我想对fileupload功能进行单元测试

读后

我试图修改CGI.pm的
t/upload.t

{
%ENV = (
%ENV, 
      'SCRIPT_NAME' => '/data.cgi',
      'SERVER_NAME' => 'localhost',
      'HTTP_CONNECTION' => 'TE, close',
      'REQUEST_METHOD' => 'POST',
      'SCRIPT_URI' => 'http://localhost/data.cgi',
      'CONTENT_LENGTH' => '160',
      'SCRIPT_FILENAME' => '/var/www/cgi-bin/data.cgi',
      'SERVER_SOFTWARE' => 'Apache/1.3.27 (Unix) ',
      'HTTP_TE' => 'deflate,gzip;q=0.3',
      'QUERY_STRING' => '',
      'REMOTE_PORT' => '1855',
      'HTTP_USER_AGENT' => 'libwww-perl/5.69',
      'SERVER_PORT' => '80',
      'REMOTE_ADDR' => '127.0.0.1',
      'CONTENT_TYPE' => 'multipart/form-data; boundary=xYzZY',
      'SERVER_PROTOCOL' => 'HTTP/1.1',
      'PATH' => '/usr/local/bin:/usr/bin:/bin',
      'REQUEST_URI' => '/data.cgi',
      'GATEWAY_INTERFACE' => 'CGI/1.1',
      'SCRIPT_URL' => '/data.cgi',
      'SERVER_ADDR' => '127.0.0.1',
      'DOCUMENT_ROOT' => '/var/www/html',
      'HTTP_HOST' => 'localhost'
    );

local *STDIN;
open STDIN, '<test.txt' or die 'argh';
binmode STDIN;

$cgi = new CGI;

run()
}

我认为您需要包含更多修改过的单元测试文件,可能还包括一些问题中的真实代码。
upload.t
文件用于单元测试CGI.pm,而您希望测试使用CGI的代码。如果您想测试程序的行为并相信CGI做了正确的事情(这就是单元测试),那么您可以简单地模拟CGI对象。CGI有自己的测试。以可以单独测试的方式编写代码。谢谢simbabque。我为环境添加了代码。事实上,在我的内容之前,长度是错误的。但是现在cgi_error被设置为400What in
run()
?这是你常规计划的一部分吗?为了使其工作,您需要以某种方式将
$cgi
对象注入到常规代码中。此外,没有窄范围的
local*STDIN
也没有多大意义,因为它的范围一直到文件的结尾,就像这样。很抱歉,没有提供足够的上下文。注入工作,已经有大约50个测试。 --xYzZY Content-Disposition: form-data; name="hello_world"; filename="goodbye_world.txt" Content-Length: 13 Content-Type: text/plain Goodbye World! --xYzZY--
  our $cgi;

  sub run() {
  $cgi = new CGI unless $cgi;
  my $upload_fh =  $cgi->upload('upload');
  }