ã¯ããã«
ã¸ã¥ã¨ã«ãè²·ããªãï¼ ASOBI STOREï¼ nikkieã§ãã
ãRustã®ç·´ç¿å¸³ã1ç« ãåçµã¾ã§çµãã¾ãã1ã
æ¸ç±ã®ç¯å²ããé¸è±ãã¦ããã¥ã¡ã³ããèªã¿ã«è¡ã£ãã¡ã¢ã§ãã
ãã¹ãé¢ä¿ã®ã¨ããã調ã¹ã¦ãã¾ãã
ç®æ¬¡
- ã¯ããã«
- ç®æ¬¡
- ãã¹ãã§target/debugä¸ã®å®è¡ãã¡ã¤ã«ãå®è¡ãã
- trueã³ãã³ã
- falseã³ãã³ã
- helloã³ãã³ããåºåã®ãã¹ã
- çµããã«
ãã¹ãã§target/debugä¸ã®å®è¡ãã¡ã¤ã«ãå®è¡ãã
Cargo.tomlã®dev-dependenciesã«è¿½å ã
https://crates.io/crates/assert_cmd
assert_cmdaims to simplify the process for doing integration testing of CLIs, including:
- Finding your crate's binary to test
- Assert on the result of your program's run.
Command::cargo_bin
https://docs.rs/assert_cmd/latest/assert_cmd/cmd/struct.Command.html#method.cargo_bin
Create a Command to run a specific binary of the current crate.
target/debugä¸ã®å®è¡ãã¡ã¤ã«ãå®è¡ãã¦ããã¾ãã
ç°å¢å¤æ°PATHã®å
¼ãåãã§è¨å®ãããã®ã§ããï¼â»æ¸ç±åç
§ï¼ãã¯ã¬ã¼ãã使ãã ãã§æ¸ããªãã¦ããã¯ä¾¿å©ã§ã
cargo_bin()ã®è¿ãå¤ã¯Result<Self, CargoError>ã
ããã¯ãã¹ããªã®ã§CargoErrorãªãããã§è½ã¨ãã¦ãããunwrap()ã¨ããçè§£ã§ãã
https://doc.rust-lang.org/std/result/enum.Result.html#method.unwrap
unwrap()ããã¨ï¼Selfãªã®ã§ï¼assert_cmdã®Commandãè¿ã£ã¦ããã®ã ã¨æã£ã¦ãã¾ãã
trueã³ãã³ã
ãã¹ãã³ã¼ã
https://github.com/kyclark/command-line-rust/blob/10d983f68e84b9c94057da6ecf555bc419e11999/01_hello/tests/cli.rs#L13-L17
cmd.assert().success();
Commandã®assertã¡ã½ãã
https://docs.rs/assert_cmd/latest/assert_cmd/cmd/struct.Command.html#method.assert
Run a Command and make assertions on the Output.
ããã§ã³ãã³ããå®è¡ããããã§ããï¼
è¿ããªãã¸ã§ã¯ãã¯Assertã
ãã®success()ã¡ã½ããã¯
https://docs.rs/assert_cmd/latest/assert_cmd/assert/struct.Assert.html#method.success
Ensure the command succeeded.
trueã³ãã³ããæåããã¨è¡¨æãã¦ããããã§ããã
ï¼æºããããªããã°ãã¹ããè½ã¡ã¦æ°ä»ããï¼
ãã以ä¸ã¯å®è£ ãè¦ã¦ã¿ãªãã¨ã§ãããçµäºã¹ãã¼ã¿ã¹ã0ã«ãªããã¨ãè¦ã¦ããã®ããªï¼
falseã³ãã³ã
å®è£
ã«ä½¿ã£ãã®ã¯std::process::abort()
https://doc.rust-lang.org/std/process/fn.abort.html
Terminates the process in an abnormal fashion.
ãªããtrueã®å®è£
ã§ä½¿ã£ã¦ããã®ã¯std::process::exit()ã§ãã2ã
https://doc.rust-lang.org/std/process/fn.exit.html
Terminates the current process with the specified exit code.
ãã¹ãã³ã¼ãã§ããã
https://github.com/kyclark/command-line-rust/blob/10d983f68e84b9c94057da6ecf555bc419e11999/01_hello/tests/cli.rs#L19-L23
cmd.assert().failure();
failure()ã¡ã½ãã
https://docs.rs/assert_cmd/latest/assert_cmd/assert/struct.Assert.html#method.failure
Ensure the command failed.
helloã³ãã³ããåºåã®ãã¹ã
cmd.assert().success().stdout("Hello, world!\n");
Assertã®success()ã¡ã½ããã¯Selfããªãã¡Assertãè¿ãã¾ãã
stdout()ã¡ã½ããã¯
https://docs.rs/assert_cmd/latest/assert_cmd/assert/struct.Assert.html#method.stdout
Ensure the command wrote the expected data to stdout.
弿°ã§æ¸¡ããæååãæ¨æºåºåã«æ¸ããããã¨ãä¿è¨¼ãã¦ãã¾ãã
æ«å°¾ã®æ¹è¡è¾¼ã¿ã§ãHello, worldãã¨åºåããããã¨ãæ¤è¨¼ããããã§ãã3ã
çµããã«
assert_cmdã使ã£ãå®è£
ã«ã¤ãã¦ãåçµä¸ã«è¦ãããã¥ã¡ã³ãã®ã¡ã¢ã§ããã
cargo_bin()ã¨unwrap()ã§ã³ãã³ããå¾ãassert()ã§ã³ãã³ããå®è¡success()ãfailure()ã§ã³ãã³ãã®æåï¼å¤±æãæ¤è¨¼success().stdout("...")ã¯æåãã¦ãã¦ããã¤ãæ¨æºåºåãæ¸¡ããæååéãããæ¤è¨¼
æ¸ç±ã®ãã¼ã¹ã§é²ãã§ãããã¨æãã¾ãããç§ã®å¾åã¨ãã¦æåºãç¥ã£ã¦ãããã»ããæ¥½ããã§å¦ãã§ãããã®ã§ã¾ã¨ãã¦ãã¾ãã
ãã¾ã¯ããåãã£ã¦ããªããã¨ãä¸ã¤ã
let mutã£ã¦ãªãããæ¸ããã§ããããï¼
// https://docs.rs/assert_cmd/latest/assert_cmd/cmd/struct.Command.html#method.cargo_bin let mut cmd = Command::cargo_bin(env!("CARGO_PKG_NAME")) .unwrap();
letã夿°ã¸ã®æç¸ã§ãmutãå¯å¤ã«ããã¨ããçè§£ãªã®ã§ãããlet cmd =ã ã¨ãªãã§ãããªããã§ãããï¼
夿°ã«æç¸ããã¦ããå¤èªä½ãå¤ããï¼ï¼
åçµã®ç¶æ
-
ååã¯
cargo newãåãä¸ãã¦ãã¾ã ↩ -
Pythonã§ããã¨
sys.exit()ã§ããã https://docs.python.org/ja/3/library/sys.html#sys.exit↩ -
pytestã®
capsysã£ã½ããªã¨æãã¾ãã https://docs.pytest.org/en/stable/how-to/capture-stdout-stderr.html#accessing-captured-output-from-a-test-function↩
