重构perl sub以获得可测试性
发布时间:2020-12-16 06:21:11 所属栏目:大数据 来源:网络整理
导读:我继承了一个perl代码库.考虑以下子程序; sub getSysRTable{ my $iface = shift; return if not length($iface); my %ip_routes; my @routes = `/usr/bin/netstat -rn`; foreach my $route(@routes) { if ($route =~ /([S.]+)s+([d.]+.[d.]+.[d.]+.[d.
我继承了一个perl代码库.考虑以下子程序;
sub getSysRTable { my $iface = shift; return if not length($iface); my %ip_routes; my @routes = `/usr/bin/netstat -rn`; foreach my $route(@routes) { if ($route =~ /([S.]+)s+([d.]+.[d.]+.[d.]+.[d.]+)s+(UGS|UGHS)s+($iface)/ ) { $ip_routes {$1} = $2 } } return %ip_routes; } 我想为这段代码编写单元测试.我想到的测试将使用netstat -rn的示例输出并检查预期的行为. sub as is,调用一个命令,因此使用此实现注入我的测试数据是有问题的. 为了测试性而重构这个子的惯用方法是什么? 解决方法
首先,更改您的代码如下:
sub getDataForSysRTable { return `/usr/bin/netstat -rn`; } sub getSysRTable { my $iface = shift; return if not length($iface); my %ip_routes; my @routes = getDataForSysRTable(); foreach my $route(@routes) { if ($route =~ /([S.]+)s+([d.]+.[d.]+.[d.]+.[d.]+)s+(UGS|UGHS)s+($iface)/ ) { $ip_routes {$1} = $2 } } return %ip_routes; } 那么为了你的测试,你可以做到 local *getDataForSysRTable = sub { ... return known data ... }; my $ip_routes = getSysRTable($iface); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |