既存のクラスでメソッドをテストしようとしています。クラスのメソッド内で、メソッドinputStreamThreadが呼び出されます。Foo.crawler.crawlerapp.CrawlerAppaddUrl
inputStreamThreadstdin から読み取ってから呼び出すaddUrl
addUrlCrawlerAppクラスにもいる
assert_called_withモックで使用して、正しいことを行って呼び出していることaddUrlを確認できることを望んでいましたinputStreamThreadaddUrl
問題は、内部のモックの構文を正しく取得できないことaddUrlですCrawlerApp
モックドキュメントから直接例を使用しましたが、以下に示すエラーが発生します
ご覧のとおり、stdin をモックして、テスト データを表示できるようにしています。
私の質問は、この種のテストを実行し、エラーが表示されないようにするためにどのコードを使用するかです。
import Foo.crawler.crawlerapp
from unittest import TestCase
from mock import patch, Mock
from mephistopheles.messageformat import EventDataFrame
from mephistopheles.messageformat.types import adservers as pbufs
import time
import sys
class testDeserial(TestCase):
def generate_dummy_auction_event(self,url):
adunitinfo = pbufs.AdUnitInfo(index_on_page=0, url=url)
geoloc = pbufs.GeoLocation(country="DE", region="low")
userinfo = pbufs.UserInfo(user_hash=1,
ip_octets=1,
geolocation=geoloc,
language="en")
auctioninfo = pbufs.AuctionInfo(timestamp=int(time.time()),
user=userinfo,
ad_unit=adunitinfo)
return auctioninfo
def setUp(self):
pass
@patch.object(Foo.crawler.crawlerapp.CrawlerApp,'addUrl')
def test_check_url(self, MaddUrl):
url_a = "http://audaxing.wordpress.com"
dummy_event = self.generate_dummy_auction_event(url_a)
with patch("sys.stdin") as mock_stdin:
mock_stdin.read.return_value = dummy_event
ca._running = True
input_thread = threading.Thread(target=self.inputStreamThread)
input_thread.start()
time.sleep(0.5)
ca._running = False
MaddUrl.assert_called_with(url_a)
テスト実行出力....
$ bin/tests --tests-pattern=test_deserialize
Test-module import failures:
Module: Foo.crawler.tests.test_deserialize
Traceback (most recent call last):
File "/home/jamie/svn/Foo/crawler.buildout/trunk/src/Foo.crawler/Foo/crawler/tests/test_deserialize.py", line 11, in <module>
class testDeserial(TestCase):
File "/home/jamie/svn/Foo/crawler.buildout/trunk/src/Foo.crawler/Foo/crawler/tests/test_deserialize.py", line 28, in testDeserial
@patch.object(Foo.crawler.crawlerapp.CrawlerApp,'addUrl')
AttributeError: 'function' object has no attribute 'object'
Test-modules with import problems:
Foo.crawler.tests.test_deserialize
Total: 0 tests, 0 failures, 0 errors in 0.000 seconds.