require 'test/unit' require 'article' require 'rubygems' require_gem 'flexmock' class Article attr_accessor :mock def createConnection return @mock end end class TestArticle < Test::Unit::TestCase def setup @article = Article.new @year, @month = 2004,5 @url_base = 'http://www.linux-magazin.de' + \ '/Artikel/ausgabe/' + sprintf('%s/%02d', @year, @month) @no_content = 'keine verwertbaren Daten' @html = <
  • Aktuell: News aus der Linux-Welt
  • Userspace-Dateisyteme html end def test_parse_articles_no_content assert_nil(@article.parse_articles(@no_content)) end def test_parse_articles result = @article.parse_articles(@html) assert_instance_of(Array, result) assert_equal(2, result.length, 'falsche Anzahl an Artikeln') end def test_load_article_page mock = FlexMock.new mock.mock_handle(:get) { [nil, 'testhtml'] } @article.mock = mock html = @article.load_article_page(@year, @month) assert_equal('testhtml', html) end def test_load_article_page_network_error mock = FlexMock.new mock.mock_handle(:get) { raise SocketError, 'Netzwerkfehler' } @article.mock = mock assert_raise(SocketError) { @article.load_article_page(@year,@month) } end def test_get_address url = @article.send(:get_address, @year, @month, 'suffix') assert_equal(@url_base + 'suffix', url) end def test_read_articles mock = FlexMock.new mock.mock_handle(:get) { |param| assert_equal(@url_base + '/index_html?print=y', param, 'Falsche URL') [nil, @html] } @article.mock = mock result = @article.read_articles(@year, @month) assert_equal('Userspace-Dateisyteme',result[1][0]) assert_equal(@url_base + '/userspace/userspace.html',result[1][1]) assert_equal(2, result.length, 'falsche Anzahl an Artikeln') end def test_read_articles_no_content mock = FlexMock.new mock.mock_handle(:get) { [nil, @no_content] } @article.mock = mock assert_nothing_raised { @article.read_articles(@year, @month) } assert_instance_of(String, @article.read_articles(@year, @month)) end def test_read_articles_network_error mock = FlexMock.new mock.mock_handle(:get) { raise SocketError, 'simulierter Netzwerkfehler' } @article.mock = mock assert_nothing_raised { @article.read_articles(@year, @month) } assert_instance_of(String, @article.read_articles(@year, @month)) end end