You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试prompt命令?如何在t/文件中编写测试并响应prompt?

Raku交互式代码的测试方案

先看你提供的原代码:

my $x = prompt "Are you OK? ";
say $x ~~ 'y' ?? "Great!" !! "Bummer";

use Test;

一、可编写的测试用例

针对这段逻辑,可覆盖以下测试场景:

  • 输入小写y时,验证输出为Great!
  • 输入非y的内容(比如n、abc等任意字符串)时,验证输出为Bummer
  • 输入大写Y时,验证输出为Bummer(原代码仅匹配小写y)

二、让测试响应prompt输入的方法

Raku的prompt默认读取标准输入,自动化测试时不需要手动输入,可通过mock prompt函数的方式预设输入值,同时捕获输出进行断言。以下是完整的测试文件示例:

use Test;

# 辅助函数:捕获标准输出内容
sub capture_stdout(&code) {
    my $output;
    my $*OUT = class { method print($str) { $output ~= $str } };
    code();
    return $output;
}

# 测试输入'y'的场景
sub prompt($) { 'y' }
my $output = capture_stdout {
    my $x = prompt "Are you OK? ";
    say $x ~~ 'y' ?? "Great!" !! "Bummer";
}
is $output.chomp, "Great!", '输入小写y时输出正确';

# 测试输入'n'的场景
sub prompt($) { 'n' }
$output = capture_stdout {
    my $x = prompt "Are you OK? ";
    say $x ~~ 'y' ?? "Great!" !! "Bummer";
}
is $output.chomp, "Bummer", '输入n时输出正确';

# 测试输入大写Y的场景
sub prompt($) { 'Y' }
$output = capture_stdout {
    my $x = prompt "Are you OK? ";
    say $x ~~ 'y' ?? "Great!" !! "Bummer";
}
is $output.chomp, "Bummer", '输入大写Y时输出正确';

done-testing;

原理说明

  1. Mock prompt函数:在每个测试场景中重新定义prompt,让它直接返回预设的输入值,替代原本的标准输入读取逻辑。
  2. 捕获标准输出:通过自定义的capture_stdout函数,临时替换标准输出流,将代码运行时的输出内容保存到变量中,方便后续断言验证。

内容的提问来源于stack exchange,提问作者Jim Bollinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:24:45