两天前我参加了一个面试。我被问了一个问题,我还在寻找答案。问题是告诉我 c 中 atof(const char *str) 函数的测试用例。我告诉他各种测试用例,例如
- 我必须检查给定的字符串应该只包含数字。
- 给定字符串包含一个小数点。
- 转换后不应溢出。
- 字符串不应为空。
但面试官不满意并要求以结构化格式给我答案。现在我的问题是如何以结构格式表示这个答案,以便将来我不会犯同样的错误。
我不确定面试官所说的“结构化格式”是什么意思,但我会通过写下浮点数的 BNF 语法(C 语言指定它们)来做到这一点,然后提供测试用例来测试通过句法。您的案例尤其不包括符号或指数,并且数字不需要包含小数点。
结构化方法将问题分解为子问题。语法是一个子问题,语法图表或 BNF 提供了一种将其分解为子问题的自然方法。另一个子问题是边界条件......应该有最小(> 0)和最大有效值的测试用例。还应该有处理无效输入的测试用例,但正如 lundin 在评论中指出的那样,这是不可能的,atof
因为无效输入的行为是未定义的。
也许您可以通过您正在测试的内容来构建您的答案,例如给出错误的格式化字符串(null、empty 等)以及给出错误的参数,如错误的“数字”(0 前缀/后缀 2.0、0.4 等...)您还可以测试负浮点数,在字符串中放置多个点或其他任何内容。我希望我已经回答了你的问题,如果没有,我想我还没有很好地理解这个问题。
我对“测试用例”一词的理解与您不同。
我认为他想要的是各种输入atof
及其预期结果。例如:
1.atof("1.5")
应该返回1.5
.
2.atof("-7")
应该返回-7.0
。
3.atof("Hello, world")
应该失败。但是按照 Lundin 的评论,对于 没有定义的失败行为atof
,所以你不能真正测试这个。
测试用例应涵盖功能需要测试的所有不同内容。但是你不需要写下这些东西——只是示例输入和预期输出。
以结构化格式编写它很容易。
我们在代码中使用了 useatof
大部分时间,我们需要将Internationalization/Localization
许多语言10.0
转换为10,0
.
在调用之前,atof
您需要设置语言环境,在完成功能后,您必须重置语言环境。