gpt4 book ai didi

c++ - 对以副作用为目的的函数进行单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:16 28 4
gpt4 key购买 nike

您将如何对 do_int_to_string_conversion 进行单元测试?

#include <string>
#include <iostream>

void do_int_to_string_conversion(int i, std::string& s) {
switch(i) {
case 1:
s="1";
break;
case 2:
s="2";
break;
default:
s ="Nix";
}
}

int main(int argc, char** argv){
std::string little_s;

do_int_to_string_conversion(1, little_s);
do_int_to_string_conversion(2, little_s);
do_int_to_string_conversion(3, little_s);

}

最佳答案

与其担心如何测试目前的功能,我会重新设计该功能以更合理地工作,然后测试重新设计的版本。

现在,该函数似乎具有三个独立的(并且只有轻微相关的)职责:进行转换、修改外部提供的字符串以及将一些数据写入流。它写入的流 (std::cout) 也是硬编码的——一个等待发生的问题(例如,转换到 GUI 环境可能很重要)。

我将从 1) 将其拆分为逻辑函数,以及 2) 提供流作为参数开始。

std::string convert_int(int val) {
switch (val) {
case 1: return "1";
case 2: return "2";
default: return "Nix";
}
}

std::ostream &write_string(std::ostream &os, std::string const &s) {
return os << s;
}

我没有包含任何内容来(特别是)修改外部提供的字符串——显然,您可以根据需要分配 convert_int 的返回值,以及传递的字符串的值in 无论如何都没有被使用。

说实话,write_string 是一个很好的完全被淘汰的候选者,但是因为你有那种基本的能力,我们暂时保留它。测试这些相对简单——对于 convert_int,我们查看它返回的字符串,并与我们预期的进行比较。对于 write_string,我们可以传递一个 stringstream 而不是普通的 ostream —— 然后我们可以使用 .str() 以字符串形式获取该结果,并(再次)与我们的预期进行比较。

关于c++ - 对以副作用为目的的函数进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2782677/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com