ChatGPTにテストコードを実装してもらう方法、使い方

  • ChatGPTにテストコードを実装してもらうプロンプト
  • 「以下のコードのテストを実装して」などの質問にコードを貼り付けて聞くだけでChatGPTがテストコードを書いてくれます。

以下のコードのテストを実装して。

from gtts import gTTS
import tempfile
from pygame import mixer
import time

mixer.init()

class Speaker_gtts:
    def __init__(self):
        self.engine = gTTS

    def speak(self, text):
        with tempfile.NamedTemporaryFile(delete=True) as fp:
            tts = self.engine(text=text, lang='ja')
            tts.save("{}.mp3".format(fp.name))
            mixer.music.load('{}.mp3'.format(fp.name))
            mixer.music.play()
            while mixer.music.get_busy():
                time.sleep(0.1)
ChatGPT<br>(GPT-3.5)
ChatGPT
(GPT-3.5)

以下は、Speaker_gttsクラスに対する単体テストの例です。このテストでは、speakメソッドを呼び出して、音声が正しく再生されるかどうかを確認します。

import unittest
from unittest.mock import patch, MagicMock
from speaker_gtts import Speaker_gtts

class TestSpeaker_gtts(unittest.TestCase):

    def setUp(self):
        self.speaker = Speaker_gtts()

    @patch('pygame.mixer.music')
    @patch('tempfile.NamedTemporaryFile')
    @patch('gtts.gTTS')
    def test_speak(self, mock_gTTS, mock_tempfile, mock_music):

        # テストデータ
        text = 'こんにちは'

        # gTTSクラスのmockを設定する
        mock_tts = MagicMock()
        mock_tts.save.return_value = None
        mock_gTTS.return_value = mock_tts

        # tempfile.NamedTemporaryFileのmockを設定する
        mock_fp = MagicMock()
        mock_fp.name = 'tempfile'
        mock_tempfile.return_value = mock_fp

        # pygame.mixer.musicのmockを設定する
        mock_music.return_value = None

        # speakメソッドを呼び出す
        self.speaker.speak(text)

        # gTTSクラスが正しく呼び出されたかどうかを確認する
        mock_gTTS.assert_called_once_with(text=text, lang='ja')
        mock_tts.save.assert_called_once_with('tempfile.mp3')

        # tempfile.NamedTemporaryFileが正しく呼び出されたかどうかを確認する
        mock_tempfile.assert_called_once_with(delete=True)

        # pygame.mixer.musicが正しく呼び出されたかどうかを確認する
        mock_music.load.assert_called_once_with('tempfile.mp3')
        mock_music.play.assert_called_once_with()

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

このテストでは、以下のことを行っています。

  • Speaker_gttsクラスのインスタンスを作成します。
  • speakメソッドを呼び出して、音声が正しく再生されるかどうかを確認します。
  • gTTS、tempfile.NamedTemporaryFile、pygame.mixer.musicのそれぞれのモックを作成し、それらが適切に呼び出されたかどうかを確認します。

このテストでは、3つのモックを使用して、テストデータを注入し、speaker_gttsクラスのメソッドが正しく動作するかを確認しています。モックを使うことで、外部の依存関係をテストの対象から取り除き、単体テストをより確実に行えます。

タイトルとURLをコピーしました