我一直在阅读和探索Perl中单元测试和测试驱动开发的概念.我正在研究如何将测试概念融入我的开发中.说我在这里有一个Perl子程序:
sub perforce_filelist {
my ($date) = @_;
my $path = "//depot/project/design/...module.sv";
my $p4cmd = "p4 files -e $path\@$date,\@now";
my @filelist = `$p4cmd`;
if (@filelist) {
chomp @filelist;
return @filelist;
}
else {
print "No new files!"
exit 1;
}
}
Run Code Online (Sandbox Code Playgroud)
子例程执行Perforce命令并将该命令的输出(文件列表)存储到@filelist数组中.这个子程序可以测试吗?测试返回@filelist的空是否有用?我正在努力教自己如何像单位测试开发人员那样思考.
我正在使用移位和加法编写软乘法函数调用。现有的函数调用如下:
unsigned long __mulsi3 (unsigned long a, unsigned long b) {
unsigned long answer = 0;
while(b)
{
if(b & 1) {
answer += a;
};
a <<= 1;
b >>= 1;
}
return answer;
}
Run Code Online (Sandbox Code Playgroud)
尽管我的硬件没有乘法器,但我有一个硬移位器。该移位器一次最多可以移位16位。
如果我想充分利用我的16位移位器。关于如何修改上面的代码以反映我的硬件功能的任何建议?给定的代码每次迭代仅移位1位。
16位移位器一次最多可以将32位无符号长值移位16位。sizeof(unsigned long)== 32位
我正在编写一个P4Perl脚本来连接Perforce服务器并自动执行Perforce命令.随着子程序的开发以访问Perforce,我也在开发单元测试来验证它们.我是Perl和单元测试的新手.
这是我与Perforce建立连接的子例程.文件名是p4_connect.pl
use warnings;
use strict;
use P4;
my $clientname = "johndoe"
my $p4port = "icmanage:1667"
main();
sub main {
my $status;
$status = connect_perforce($clientname, $p4port);
};
sub connect_perforce {
my ($clientname, $p4port) = @_;
my $status;
my $p4 = new P4;
$p4->SetClient( $clientname );
$p4->SetPort( $p4port );
$status = $p4->Connect() or die( "Failed to connect to Perforce Server" );
return $status;
}
Run Code Online (Sandbox Code Playgroud)
运行时Perl脚本执行正常"perl p4_connect.pl",不会抛出任何错误.
但是,当我将connect_perforce子例程移动到包模块(Perforce.pm)并(perforce.t)为其编写单元测试时,我遇到了以下错误:
username@hostname% perl -Ilib t/perforce.t
ok …Run Code Online (Sandbox Code Playgroud)