Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add: API 単体テスト #1065

Open
3 tasks done
tarepan opened this issue Feb 22, 2024 · 4 comments
Open
3 tasks done

add: API 単体テスト #1065

tarepan opened this issue Feb 22, 2024 · 4 comments
Assignees
Labels
初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上 状態:実装 実装をおこなっている状態

Comments

@tarepan
Copy link
Contributor

tarepan commented Feb 22, 2024

内容

要望概要: 全API実装へユニットテストを追加したい

VV engine は VV API (for マルチエンジン) の標準実装であり、かつ、中品質音声合成を実際に可能とするシンセサイザである。
そのため VV engine は以下の2つを保証する必要がある:

A. (API準拠) VV engine は VV API compatible である
B. (設計出力) VV engine は意図した値を出力する

この2つは API 実装たる app のユニットテスト (単体テスト) として保証可能である。
AとBは VV engine と外界の界面に対する保証であるため、最重要であり、全 API で確実に保証されるべきである。

このような背景から、VV engine 全 API 実装に対するユニットテスト追加を提案します。

Pros 良くなる点

  • API 準拠の保証
  • エンジン出力が意図通りであることの保証

Cons 悪くなる点

  • テストメンテコスト増加
    • Pros と比較すれば微々たるものと考える

実現方法

  1. API リストアップ
  2. ユニットテスト実装状況リスト化
  3. 各ユニットテスト実装

VOICEVOXのバージョン

0.16.0

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

関連 issues

@github-actions github-actions bot added OS 依存:linux Linux に依存した現象 OS 依存:mac macOS に依存した現象 OS 依存:win Windows に依存した現象 labels Feb 22, 2024
@tarepan
Copy link
Contributor Author

tarepan commented Feb 22, 2024

単体テスト実装状況

router 単位で集約。
TODO: preset を見本に 204 の snapshot

  • engine_info
    • GET /version-200
    • GET /core_versions-200
    • GET /supported_devices-200
    • GET /engine_manifest-200
  • library
    • GET /downloadable_libraries
    • GET /installed_libraries
    • POST /install_library/{library_uuid}
    • POST /uninstall_library/{library_uuid}
  • morphing
    • POST /morphable_targets-200
    • POST /synthesis_morphing
  • portal_page
    • GET /-200
  • preset
    • GET /presets-200
    • POST /add_preset-200
    • POST /update_preset-200/422
    • POST /delete_preset-204/422
  • setting
  • speaker
    • GET /speakers-200
    • GET /speaker_info-200
    • GET /singers-200
    • GET /singer_info-200
    • POST /initialize_speaker-204
    • GET /is_initialized_speaker-200
  • tts_pipeline
    • POST /audio_query-200
    • POST /audio_query_from_preset-200/422
    • POST /accent_phrases-200
    • POST /mora_data-200
    • POST /mora_length-200
    • POST /mora_pitch-200
    • POST /synthesis-200
    • POST /cancellable_synthesis
    • POST /multi_synthesis
    • POST /sing_frame_audio_query-200
    • POST /sing_frame_volume-200
    • POST /frame_synthesis-200
    • POST /connect_waves
    • POST /validate_kana
  • user_dict

@Hiroshiba
Copy link
Member

issue 作成ありがとうございます!

AとBをどう分けるかが少し論点になりそうだと思いました。
B用のテストは出力値のスナップショットテストなどなどで、 A用のテストはstatus okが返ることを保証するだけ、みたいな・・・?

@tarepan
Copy link
Contributor Author

tarepan commented Feb 24, 2024

AとBをどう分けるか

👍
同意です。

B用のテストは出力値のスナップショットテスト

👍
同意です。値ハードコード or スナップショットで意図した出力値を保証できると思います。

A用のテストはstatus okが返ることを保証

ここなんとも微妙ですね。
より安全側に倒すのであれば「response 200 + response 型バリデーション」という手もあります。
ただ「run.py が FastAPI ベースなので型安全性は確保されている」というのも事実です。
私としては「200 チェックだけすればいい…かなぁ…?」くらいの温度感です。

@Hiroshiba
Copy link
Member

より安全側に倒すのであれば「response 200 + response 型バリデーション」という手もあります。

なるほどです!
個人的には値のチェックはそこまで必要ないと思ってたのですが、型のチェックくらいならやっても良いかもと思いました!

あ、いや、レスポンス内のkeyとかが変わってないことをテストしないとかもなので、キーチェックはあっても良い・・・かも・・・?
(あるいは同じ型をテスト側に実装して、parseできることを確認するとか・・・)

@tarepan tarepan added 初心者歓迎タスク 初心者にも優しい簡単めなタスク 状態:実装者募集 実装者を募集している状態 labels Mar 5, 2024
@tarepan tarepan removed OS 依存:mac macOS に依存した現象 OS 依存:linux Linux に依存した現象 OS 依存:win Windows に依存した現象 labels Mar 8, 2024
@tarepan tarepan self-assigned this Mar 9, 2024
@tarepan tarepan added 状態:実装 実装をおこなっている状態 and removed 状態:実装者募集 実装者を募集している状態 labels Mar 18, 2024
@tarepan tarepan removed their assignment Mar 22, 2024
@tarepan tarepan added 状態:実装者募集 実装者を募集している状態 and removed 状態:実装 実装をおこなっている状態 labels Mar 26, 2024
@tarepan tarepan added 状態:実装 実装をおこなっている状態 and removed 状態:実装者募集 実装者を募集している状態 labels Mar 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上 状態:実装 実装をおこなっている状態
Projects
None yet
Development

No branches or pull requests

2 participants