Closed A03ki closed 4 years ago
Timeline.home_timelineは以下のコードで記述されている。
Timeline.home_timeline
def home_timeline(self, count, since_id=None, max_id=None): ... tweets = self._api.home_timeline(count=count, since_id=since_id, max_id=max_id) timeline_name = self.home_timeline.__name__ if tweets != []: try: self._storage.create_ids(timeline_name, tweets) except ValueError: self._storage.update_ids(timeline_name, tweets) return tweets
TestTimeline.test_home_timeline_storage_create_idsは以下のコードで記述されている。
TestTimeline.test_home_timeline_storage_create_ids
def test_home_timeline_storage_create_ids(self): expectation_tweets = [1] api = Mock(**{"home_timeline.return_value": expectation_tweets}) storage = Mock() timeline = Timeline(api, storage) expectation_kwargs = {"count": 200, "since_id": 20, "max_id": 2} actual = timeline.home_timeline(**expectation_kwargs) self.assertEqual(expectation_tweets, actual) storage.create_ids.assert_called_once_with("home_timeline", expectation_tweets)
タイムラインのsince_idとmax_idを保存する箇所が以下のコードだが、この処理はhome_timelineに限らない。つまり、今後実装するであろうmentions_timeline、retweets_of_me、user_timelineでも同様の処理を行いたい。
since_id
max_id
home_timeline
mentions_timeline
retweets_of_me
user_timeline
if tweets != []: try: self._storage.create_ids(timeline_name, tweets) except ValueError: self._storage.update_ids(timeline_name, tweets) return tweets
もしTimelineクラスにmentions_timelineメソッドを追加した場合、test_home_timeline_storage_create_idsと同じ様なテストコードを書くことになる。同じことがtest_home_timeline_apiやtest_save_timeline_ids_update_idsでも言える。
Timeline
test_home_timeline_storage_create_ids
test_home_timeline_api
test_save_timeline_ids_update_ids
since_idとmax_idを保存するためのTimeline.save_timeline_idsを作成し、該当箇所を置き換える。
Timeline.save_timeline_ids
def home_timeline(self, count, since_id=None, max_id=None): ... tweets = self._api.home_timeline(count=count, since_id=since_id, max_id=max_id) self.save_timeline_ids(self.home_timeline.__name__, tweets) return tweets
この変更を行うと、テストコードもTestTimeline.test_save_timeline_ids_create_idsの1つだけを作れば良くなる。
TestTimeline.test_save_timeline_ids_create_ids
前提
Timeline
Timeline.home_timeline
は以下のコードで記述されている。TestTimeline
TestTimeline.test_home_timeline_storage_create_ids
は以下のコードで記述されている。問題点
Timeline
タイムラインの
since_id
とmax_id
を保存する箇所が以下のコードだが、この処理はhome_timeline
に限らない。つまり、今後実装するであろうmentions_timeline
、retweets_of_me
、user_timeline
でも同様の処理を行いたい。TestTimeline
もし
Timeline
クラスにmentions_timeline
メソッドを追加した場合、test_home_timeline_storage_create_ids
と同じ様なテストコードを書くことになる。同じことがtest_home_timeline_api
やtest_save_timeline_ids_update_ids
でも言える。解決策
since_id
とmax_id
を保存するためのTimeline.save_timeline_ids
を作成し、該当箇所を置き換える。この変更を行うと、テストコードも
TestTimeline.test_save_timeline_ids_create_ids
の1つだけを作れば良くなる。