VOICEVOX / voicevox_engine

無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXの音声合成エンジン
https://voicevox.hiroshiba.jp/
Other
1.29k stars 195 forks source link

add: API 単体テスト #1065

Open tarepan opened 7 months ago

tarepan commented 7 months ago

内容

要望概要: 全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 良くなる点

Cons 悪くなる点

実現方法

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

VOICEVOXのバージョン

0.16.0

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

関連 issues

tarepan commented 7 months ago

単体テスト実装状況

router 単位で集約。

Hiroshiba commented 7 months ago

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

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

tarepan commented 7 months ago

AとBをどう分けるか

👍
同意です。

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

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

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

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

Hiroshiba commented 6 months ago

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

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

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