actix-webのテストどうしてる?@matsu7874
View Slide
matsu7874• @matsu7874• [email protected]• オフィス不動産領域のSaaS• 新しいプロダクトをRustで開発しています• 『実践Rustプログラミング入門』共著• TechFeed Official Expert(Rust)
3モジュール構成と役割MainWebサーバの起動ルーティングの設定Apiユースケースごとに必要な処理を行うSqlサブクレートDBに問い合わせを行うMySQL矢印は呼び出しの方向
4モジュール構成とテストMainWebサーバの起動ルーティングの設定Apiユースケースごとに必要な処理を行うSqlサブクレートDBに問い合わせを行うMySQL単体テストドメインロジックだけ結合テストアプリケーションをテストDBに接続してAPIを実行する`cargo test cargo test -- --test-threads=1 --ignored `で実行単体テストドメインロジックだけ
テスト実行の実行方法actix-webというフレームワークを使っています。実行方法は変わりません、書き方がすこし変わります。• `cargo test –workspace`: workspace全体のテストが実行できます• `cd sql; cargo test` とsqlクレートを個別にテストする必要はありません。• 結合テストは `cargo test --ignore` で実行できます
6モジュール構成とテスト(再掲)MainWebサーバの起動ルーティングの設定Apiユースケースごとに必要な処理を行うSqlサブクレートDBに問い合わせを行うMySQL単体テストドメインロジックだけ結合テストアプリケーションをテストDBに接続してAPIを実行する`cargo test cargo test -- --test-threads=1 --ignored `で実行単体テストドメインロジックだけ
単体テストの実装src/api/building.rsとかに実装• 普通に単体テストを実装• #[test]というアトリビュートをつけて実装のあるファイルに書く• ビジネスロジック, Fromのテストを実装する
結合テストの実装tests/test_api_building.rs#[test]の代わりに#[actix_web::test]をつけるmysqlはモックしない
結合テストの実装 tests/test_api_hoge.rsauth0のモックサービスを起動リクエストを作ってレスポンスを得る
今後重要度が上る可能性のある問題何か解決策を思いついた方はぜひコメントで教えてください。• 結合テストを並列で実行できていない• 利用するデータをきれいに分けられれば良さそう• SQLが正しいことをテストできてない• MySQLもモックして、Rust側で問題ないことを担保する?
actix-webを使った結合テストも簡単に書ける!
感想など• middlewareを使っていても全部モックしなくても良さそう• こまめに境界で型を作っていくとびっくりが少なくて良かったRustでの開発についてもっと聞きたいぜという方、meetyしましょう↓