メールを送信するアプリの
自動E2Eテストのための
SMTPサーバーとその実装
自己紹介
メール送信するアプリの自動E2Eテストに
リアルなメールサーバー使うと...
• そのようなメールサーバーの選定や手配が手間
• メールボックスどうやって使い分ける?
• テスト対象プログラムが送信したメールをどう
やってAssertする?
...なので、専用のモックサー
バーを使いましょう。
でも、自動化されたE2Eテストに
使える、気に入ったものがない...
• Black Jumbo Dog を活用してた時期もあった
のですが。
で、自作した。 ( http://j.mp/smtp4test )
特徴
• SMTP をしゃべって SMTP サーバーを模擬す
るだけでなく、HTTP もしゃべる。
• HTTP 経由で各種設定・制御を行う。
• いわゆる Web API
Demonstration
Web API 経由で各種設定・制
御を行うことにより...
テストの自動化が捗る!
• メールが正しく送信されたかどうか、テストプロ
グラムが HTTP 経由で Assert 可能。
• 1テストシナリオが終了するごとに、メールボック
スの清掃を、テストプログラムが実行可能。
• (異常系の再現のために) SMTP 認証の有無や、
サービス不能状態の模擬といった構成を、テスト
プログラムが実行可能。
Web アプリとしてUIを実装可能
• Web API を呼び出す HTML/JavaScript を書けば UI
が作れる。
• UI があれば、テストがコケたときなどに、ささっと状
況を確認できる。
• MacOS や Linux はもちろん、ARM CPU な
Raspberry Pi 上でも動作するよう実装できる
• .NET系で実装する場合、今回は Windows のタスクトレイに常駐する
WinForms アプリとして作ったが、コンソールアプリ、または Mono
XSP上で動く ASP.NET アプリとして作ればよい。
補足 – 実は...
• ここまでやりきって、力尽きたというか、飽き
たというか。
• 2年くらい保守してません。
• API ドキュメントすらないw
• 他の人使えないじゃん!
• かくいう自分も、API 仕様かなり忘れてた (汗
• そんな状況なので、このアプリの存在もほとん
ど宣伝してません。
• いちおうGPLなオープンソース。
まとめ: 言いたかったこと x 2つ
• テストあきらめないで!
• “メール送信部分を DI 化して...” とかできなくても、
模擬サーバーでも十二分に自動化テストできるよ!
• Web API で作っておけば、UI も Web で作れ
るよ → Gtk+ とか Electron とか Mono でWinForms とか頑
張らなくても、UI を持つ マルチプラットフォーム
な C# アプリを作れるよ!

CLR/H 第99回勉強会ライトニングトーク