Djangoでmail送信のコードを書けたはいいものの、unit testはどうやって作成すればいいのかわからない人のために紹介します。
本記事で紹介するコードでは、実際にメールが送信されるということはありませんのでご安心ください。
また以下は以前、説明したDjangoでメール送信機能を実装する紹介をしています。
コンテンツ
mailのユニットテスト
まずmailのユニットテストの場合、実際にメールが送信されるということはありませんのでご安心ください。
そして以下がユニットテストになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from django.core import mail from django.test import TestCase class EmailTests(TestCase): def test_send_email(self): """きちんとメールが送信されるかテスト """ mail.send_mail(subject='Example Subject', message='This is example message.', from_email='from@example.com', recipient_list=['to@example.com') self.assertEqual(len(mail.outbox), 1) self.assertEqual(mail.outbox[0].subject, 'Example Subject') self.assertEqual(mail.outbox[0].body, 'This is example message.') self.assertEqual(mail.outbox[0].from_email, 'tom@example.com') self.assertEqual(mail.outbox[0].to[0], 'to@example.com') |
一番気になるのは、self.assertEqual(len(mail.outbox), 1)のmail.outboxではないでしょうか。
mail.outboxは送信済みのメールのリストになります。
つまり送信済みのメールはリストとしてmail.outboxに格納され、今回のようなテストの場合はoutbox[インデックス番号=0]としてassertEqualで照合を実行しています。
あとは、mail.outbox[0]のsubject,body,from_email等を指定して照合をしていきます。
またテストケースごとに、mail.outboxはリセットされますのでご安心を。
今回は単体のユニットテストなので、インデックス番号を0とおいていますが、これが全方位的にレギュラーテストを実行する場合はemailを送信する箇所に遭遇するたびに、リストに格納されていきますので、その都度インデックス番号を気にしてテストを照合していくことが必要になりますので、その点だけ留意してください。
参考
https://docs.djangoproject.com/en/4.0/topics/testing/tools/
最後に
いかがでしたでしょうか。
以上が、「【Django】mail送信のunit test(ユニットテスト)コードの紹介」の紹介記事になります。
プログラミング学習を効率良く進めるには…
私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。
そしてネットで調べていくうちに膨大な時間が過ぎていきました。
私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。
1. いつまでもダラダラとやらないで、目標を決定して短期集中する
2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう
.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。
カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?
また以下のリンク先ではdjangoを教えてくれるスクールをまとめ紹介しています。
コメントを残す