我正在使用 C++ 中的 CppUTest 实现自动化测试。
我意识到我最终几乎是在测试本身上复制和粘贴要测试的逻辑,这样我就可以检查预期的结果。
我做对了吗?不应该吗?
编辑:我会尝试更好地解释:
被测单元接受输入A,进行一些处理并返回输出B
因此,除了进行一些黑框检查,比如检查输出是否在预期范围内,我还想看看我得到的输出 B 是否是输入 A 的正确结果如果逻辑按预期工作。
因此,例如,如果该单元只是使 A 乘以 2 以产生 B,那么在测试中,除了再次计算 A 之外,我没有其他检查方法 次 2 来检查 B 以确保一切正常。
这就是我所说的重复。
// Actual function being tested:
int times2( int a )
{
return a * 2;
}
.
// Test:
int test_a;
int expected_b = test_a * 2; // here I'm duplicating times2()'s logic
int actual_b = times2( test_a );
CHECK( actual_b == expected_b );
.
PS:我想我会在另一个问题中用我的实际源代码重新表述这一点。
最佳答案
如果您的目标是为现有代码构建自动化测试,那么您可能做错了。希望您知道 frobozz.Gonkulate() 的结果对于各种输入应该是什么,并且可以编写测试来检查 Gonkulate() 是否返回正确的东西。如果您必须复制 Gonkulate() 的复杂逻辑来找出答案,您可能想问问自己您对逻辑的理解程度如何。
如果您尝试进行测试驱动开发,那么您肯定做错了。 TDD 由许多快速循环组成:
- 编写测试
- 看着失败
- 让它通过
- 必要时进行重构以改进整体设计
第 1 步 - 首先 编写测试 - 是 TDD 的重要组成部分。我从您的问题中推断您是先编写代码,然后再编写测试。
关于unit-testing - 自动化测试感觉很像复制被测试的逻辑,我做对了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7827432/