2016-03-14 57 views
-1

我想爲下面顯示的這個錯誤post子例程創建一個單元測試。此方法接受錯誤名稱並打印出每個錯誤中的值。這是我的代碼:如何在Perl中創建單元測試?

use constant { 
     # link included as a variable in this example 
     ERROR_AED => { 
     errorCode => 561, 
     message => {"this is an error. "}, 
     tt => { template => 'disabled'}, 
     link => 'www.error-fix.com', 
     }, 
}; 


sub error_post { 

    my($error) = @_; 
    printf ($error->{ message });  
} 

error_post(ERROR_AED); 

這是我的方法,我敢肯定這是錯的,我試圖驗證輸入值,或者更一般地驗證它是被傳遞到error_post方法的錯誤。

#verifying input values 

sub test_error_post { 
    ok(defined $error, 'Should have an input value'); # check that it's a constant 
    ok($error->isa(constant) , 'Error should be of type constant'); 
    ok($error->errorCode), 'Should contain key errorCode'); 
    ok($error->message), 'Should contain key message'); 
    ok($error->tt), 'Should contain key tt'); 
    ok($error->wiki_page) 'Should contain key wiki page');  
} 

我知道這可能還有很長的路要走。

+1

你在最後四行有雜散括號。編輯它,至少你有一些編譯的東西。 – mob

+2

「使用常量{...}'後,您還遺失了分號,而您忘記了www.error-fix.com'上的引號。請不要發明你實際沒有使用的代碼,並直接在問題框中輸入;創建一個[mcve]並將其逐字複製粘貼。 (順便提一下,這只是一般性的建議;我可以看到你問的是正確的方法,而不是關於編譯錯誤。) – ThisSuitIsBlackNot

+0

另外,在測試中配置事物的方式,你試圖調用方法一個'$ error'對象,而不是檢查散列鍵的值。你甚至試圖運行這個代碼? – stevieb

回答

1

我沒有太多時間,但是這裏有一些測試,我會如何寫他們。但是,測試應該存在於自己的文件中,擴展名爲*.t,並且位於自己的目錄中。他們不應該與你正在編寫的代碼內聯。

use warnings; 
use strict; 

use Test::More; 

use constant { 

    ERROR_AED => { 
     errorCode => 561, 
     message => "this is an error.\n", 
     tt => { template => 'disabled'}, 
     link => 'www.error-fix.com', 
    }, 
}; 

my $error = ERROR_AED; 

is (ref $error, 'HASH', 'ERROR_AED is a hashref'); 

is (defined $error->{errorCode}, 1, 'ERROR_AED contains an errorCode key'); 
is ($error->{errorCode}, 561, 'ERROR_AED errorCode is correct'); 

is (defined $error->{message}, 1, 'ERROR_AED contains key message'); 
like ($error->{message}, qr/this is an error/, 'ERROR_AED msg output is ok'); 

is (defined $error->{tt}, 1, 'ERROR_AED contains key tt'); 
is (ref $error->{tt}, 'HASH', 'ERROR_AED tt is a hashref'); 
is (defined $error->{tt}{template}, 1, 'ERROR_AED tt href contains template key'); 
is ($error->{tt}{template}, 'disabled', 'ERROR_AED tt template is ok'); 

is (defined $error->{link}, 1, 'ERROR_AED has a link key'); 
is ($error->{link}, 'www.error-fix.com', 'ERROR_AED link is ok'); 

done_testing();