我正在構建一個perl應用程序來存檔簡單的網頁(即沒有涉及查詢字符串的靜態頁面)。我想編寫測試來驗證將訪問遠程文件的模塊的功能。爲了使測試能夠自我依賴,我正在尋找一個簡單的,自包含的測試腳本可以在本地使用的Web服務器。有沒有一種簡單的方法來設置本地,自包含的Web服務器進行Perl測試?
下面是一個例子,概述了我想要做的事情。我已經把它刪減到最低限度具有以下目錄結構: 「./MirrorPage.pm 」的
./MirrorPage.pm
./t/001_get_url.t
./t/test-docroot/test-1.json
內容:的「 ./t/001_get_url.t」
package MirrorPage;
use Moose;
use LWP::Simple;
use namespace::autoclean;
sub get_url {
my ($self, $url_to_get) = @_;
### grab the contents of the url
my $url_data = get($url_to_get);
### return the contents.
return $url_data;
}
__PACKAGE__->meta->make_immutable;
1;
內容:
#!/usr/bin/perl
use Modern::Perl;
use Test::More;
use MirrorPage;
### Start test www server on port 8123 here ###
my $t = new_ok('MirrorPage', undef, 'Create MirrorPage');
is(
$t->get_url("http://localhost:8123/test-1.json"),
'{ testkey: "testvalue" }',
"Verify the data."
);
### Kill test www server here ###
done_testing();
的 「./t/test-docroot/test-1.json」 內容:
{ testkey: "testvalue" }
目標是在「./t/001_get_url.t」中相應的註釋位置啓動並終止一個自包含的Web服務器。 Web服務器需要將「./t/test-docroot」目錄的內容作爲其文檔根目錄。
鑑於以上所有內容:什麼是最佳/最簡單的方式來設置一個自包含的Web服務器提供靜態文件在Perl中測試?
快速跟進。我已經將「ruz」的答案標記爲已接受,因爲它完全符合我對這個特定情況所需的最少量的大驚小怪。 「Chris J」關於使用MockObject的答案提供了一個更加通用的解決方案。值得檢查的是需要超越Web服務器的更復雜的測試。 –