Mockableにする=可読性を高める

時間があいたときにコツコツと組み上げているコードがあるのだが、先日紹介した@patchディレクティブを使えるMockを活用していて気づいたことがある。「Mock利用を可能にする、ということはコードの可読性があがる」ということ。例えば先日例に出した

def index(request):
	try:
		token = _get_cookie(request, 'token')
	except KeyError:
		return render_to_response('login.html')
	return render_to_response('welcome.html')

def _get_cookie(request, cookie):
	return request.COOKIES[cookie]

というコードは、もともとは

def index(request):
	try:
		token = request.COOKIES[cookie]
	except KeyError:
		return render_to_response('login.html')
	return render_to_response('welcome.html')

というものだった。だけど、requestという引数は@patchでMockできない。そこで_get_cookieというモジュール関数に切り出したわけだが、_get_cookieなんていう名称ではなく、_check_cookies_to_find_the_token_is_valid()などという名前にしておけば、その名前が処理内容を語るようにできたわけだ。

Mockを使うのは主に条件分岐や例外処理のところだから、そこをわかりやすい関数名で切り出すというのは可読性の向上につながる。*1

*1:処理があちこちに飛ぶのでできるだけ分岐させないでください、などという注文をつけられたらチェーンソーで斬りかかろう