FlaskではじめるTDD

今までTDDをやったことなかった。これからはちゃんと保守可能なコードを書いていきたいという 気持ちが生まれたのでテストコードを書くことに決めた。とりあえず単体テストから始めていく。

実装

import json

@app.route("/api/users/hello")
def hello():
    d = {
        "name":"hello"
    }
    return Response(json.dumps(d),mimetype='application/json')

テスト

import ast
from flask import Flask
import json
import unittest

class ReqTestCase(unittest.TestCase):

    def setUp(self):
        self.app = Flask(__name__)
        self.app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:////tmp/app.db"
        self.db = SQLAlchemy(self.app)


    def test_hello(self):
       """
      /api/users/helloにGETリクエストを投げたら、helloが返ってくる。
       """
        with self.app.test_client() as client:
            res = client.get("/api/users/hello")
            res.headers['Content-Type'] = 'application/json'
            data_str = res.data.decode("utf-8")
            data_dict = ast.literal_eval(data)
            self.assertEqual("hello",data_dict.get("name"))


 if __name__ == "__main__":
        unittest.main()

今までリクエスト周りのテストは書いてなかったけど、 こうやってリクエスト周りのテストを書くと純粋なデータのやり取りの実装から進めていくことができて変更に対応しやすいコードが書けそうな感じがある。

ビューとデータの密接な結合が生じているとテストコードを書きにくいことを改めて実感するいい機会になった。

Related Contents

Pickup Contents