LoginSignup
3
1

More than 5 years have passed since last update.

DjangoのUnit Testでcsvをmockとして読み込ませる

Last updated at Posted at 2018-07-09

以下のようにcsvを扱っているコードがあるとする

/hoge/management/commands/example_command.py
import csv
from django.core.management.base import BaseCommand


class Command(BaseCommand):

    def handle(self, *args, **options):
        with open(options['file'], 'r', encoding='utf-8') as f:
            reader = csv.reader(f)
            for row in reader:
                // 処理色々

この部分のテストコードを書きたい時、わざわざcsvファイルを用意して、っていうのはアレなのでmockでなんとかする必要がある
やり方は色々あるみたいだけれど、自分は以下のような感じでやってみた

/hoge/management/commands/tests/test_example_command.py
import io
from django.test import TestCase
from mock import patch


class ImportHogeHogeTest(TestCase):

    @patch("hoge.management.commands.example_command.open", create=True)
    def test_example_command(self, mock_open):
        mock_open.return_value = io.StringIO(dummy_csv_1)
        // テスト色々


dummy_csv_1 = """1,hoge,hoge_value
2,fuga,fuga_value
3,piyo,piyo_value
4,foo,foo_value
"""

上記のようにすると文字列が入った変数 dummy_csv_1 をcsvファイルとして、 with open の返り値とすることができる。
このようにすると、/hoge/management/commands/example_command.py処理色々 の部分で例えば print(row[2])とするとhoge_valueが返ってくる

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1