-
Notifications
You must be signed in to change notification settings - Fork 120
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
C APIのE2Eテストを作る #424
Comments
良さそうに感じました!! openjtalk用の辞書をどう用意し、どう差し込むかが腕の見せ所なのかなと思いました。 |
辞書については今/crates/voicevox_core/src/test_util.rsにあるやつを/crates/test_utilとして独立させ、それを利用することを考えてます。 Rust APIの方のテストも少々すっきりするはず。 - let open_jtalk_dic_dir = download_open_jtalk_dict_if_no_exists().await;
+ let open_jtalk_dic_dir = test_util::OPEN_JTALK_DIC_DIR; |
今思い付きましたが、そうするとDLL呼び出しの |
おおおお、素晴らしい便利関数ありましたね、完全に失念していました!!
workspaceを切り離すというのは、つまりrootに統合テスト用のディレクトリを作ってそこにcargo.tomlを配置する感じでしょうか。(あるいは更に1つディレクトリを用意してその下にtoml配置) |
rootというよりは以下のようにtests/下に置いて
ただworkspaceを切り離す必要性はよく考えたら薄いというよりは無い上、workspaceを統合した場合
テスト内で普通に |
code coverageも試したらちゃんと取れました。 実験#[no_mangle]
pub extern "C" fn hello() {
if false {
println!("this is dead code");
}
println!("Hello!");
} use libloading::Library;
fn main() -> anyhow::Result<()> {
unsafe {
let lib = Library::new("./target/debug/liblib.so")?;
let hello = lib.get::<unsafe extern "C" fn()>(b"hello")?;
hello();
}
Ok(())
} use duct::cmd;
#[test]
fn test() -> anyhow::Result<()> {
cmd!("cargo", "build", "-p", "lib", "-p", "run").run()?;
//assert_cmd::Command::cargo_bin("run")?
// .assert()
// .success()
// .stdout("Hello!\n")
// .stderr("");
Ok(())
} ↓ コメントアウトを解除 use duct::cmd;
#[test]
fn test() -> anyhow::Result<()> {
cmd!("cargo", "build", "-p", "lib", "-p", "run").run()?;
assert_cmd::Command::cargo_bin("run")?
.assert()
.success()
.stdout("Hello!\n")
.stderr("");
Ok(())
} 議論することが無ければ実装に入れるとは思いますが、今やるかどうかは優先度次第ですね。 |
ビルド後にテスト、良さそうに感じました! #370 は新しいAPIが増える一方で、とりあえずC APIの挙動は変わらないようにできればと考えてます! |
重いテスト用に
なるほど。それなら取り掛かった方がいいですね。 |
|
#370 ではengine互換向けのAPI以外は破壊的変更入ります |
なるほど。なら |
そうですね。現状でも使われてるのはそこなので |
内容
#400 (comment)
Pros 良くなる点
Cons 悪くなる点
実現方法
Rustのintegration test内でDLLのテストをします。
まず/crates/voicevox_core_c_api/tests/runみたいな場所にworkspaceを切り離した
bin
クレートのパッケージを作り、そこではlibloading (dlopen
/LoadLibrary
をやるクレート)でDLLを呼び出します。そしてintegration test (/crates/voicevox_core_c_api/tests/{tts,tts-via-audio-query,get-version,invalid-model,missing-openjtalk-dic,…}.rs)ではそれをビルドし、assert_cmdでテストします。
この方法であれば将来このリポジトリでもcode coverageを取りたいとなったときにこの統合テストもちゃんと対象になる、と思うのですが検証はまだしていません。
VOICEVOXのバージョン
OSの種類/ディストリ/バージョン
その他
The text was updated successfully, but these errors were encountered: