Upgrade to Pro — share decks privately, control downloads, hide ads and more …

our test strategy on actix-web app

our test strategy on actix-web app

Kentaro Matsumoto

May 19, 2022
Tweet

More Decks by Kentaro Matsumoto

Other Decks in Programming

Transcript

  1. actix-webのテストどうしてる?
    @matsu7874

    View full-size slide

  2. matsu7874
    • @matsu7874
    • SWE@estie
    • オフィス不動産領域のSaaS
    • 新しいプロダクトをRustで開発しています
    • 『実践Rustプログラミング入門』共著
    • TechFeed Official Expert(Rust)

    View full-size slide

  3. 3
    モジュール構成と役割
    Main
    Webサーバの起動
    ルーティングの設定
    Api
    ユースケースごとに必要
    な処理を行う
    Sql
    サブクレート
    DBに問い合わせを行う
    MySQL
    矢印は呼び出しの方向

    View full-size slide

  4. 4
    モジュール構成とテスト
    Main
    Webサーバの起動
    ルーティングの設定
    Api
    ユースケースごとに必要
    な処理を行う
    Sql
    サブクレート
    DBに問い合わせを行う
    MySQL
    単体テスト
    ドメインロジックだけ
    結合テスト
    アプリケーションをテストDBに接続してAPIを実行する
    `cargo test cargo test -- --test-threads=1 --ignored `で実行
    単体テスト
    ドメインロジックだけ

    View full-size slide

  5. テスト実行の実行方法
    actix-webというフレームワークを使っています。
    実行方法は変わりません、書き方がすこし変わります。
    • `cargo test –workspace`: workspace全体のテストが実行できます
    • `cd sql; cargo test` とsqlクレートを個別にテストする必要はありません。
    • 結合テストは `cargo test --ignore` で実行できます

    View full-size slide

  6. 6
    モジュール構成とテスト(再掲)
    Main
    Webサーバの起動
    ルーティングの設定
    Api
    ユースケースごとに必要
    な処理を行う
    Sql
    サブクレート
    DBに問い合わせを行う
    MySQL
    単体テスト
    ドメインロジックだけ
    結合テスト
    アプリケーションをテストDBに接続してAPIを実行する
    `cargo test cargo test -- --test-threads=1 --ignored `で実行
    単体テスト
    ドメインロジックだけ

    View full-size slide

  7. 単体テストの実装
    src/api/building.rsとかに実装
    • 普通に単体テストを実装
    • #[test]というアトリビュートをつけて実装のあるファイルに書く
    • ビジネスロジック, From<型>のテストを実装する

    View full-size slide

  8. 結合テストの実装
    tests/test_api_building.rs
    #[test]の代わりに#[actix_web::test]をつける
    mysqlはモックしない

    View full-size slide

  9. 結合テストの実装 tests/test_api_hoge.rs
    auth0のモック
    サービスを起動
    リクエストを作って
    レスポンスを得る

    View full-size slide

  10. 今後重要度が上る可能性のある問題
    何か解決策を思いついた方はぜひコメントで教えてください。
    • 結合テストを並列で実行できていない
    • 利用するデータをきれいに分けられれば良さそう
    • SQLが正しいことをテストできてない
    • MySQLもモックして、Rust側で問題ないことを担保する?

    View full-size slide

  11. actix-webを使った結合テストも簡単に書ける!

    View full-size slide

  12. 感想など
    • middlewareを使っていても全部モックしなくても良さそう
    • こまめに境界で型を作っていくとびっくりが少なくて良かった
    Rustでの開発についてもっと聞きたいぜという方、meetyしましょう↓

    View full-size slide