c# - C# 如何在生产功能上有数百万个测试用例时使用 TDD?

  显示原文与译文双语对照的内容
137 3

在TDD中,你可以以选择测试用例,然后编写足够的生产代码。

我对这个过程的问题是TDD说你写足够的代码只是通过你刚刚写的测试。我所指的是,如果一个方法可以以有 比如 1万个测试用例,你能做什么? !显然没有写 1个测试案例? !

让我从下面的例子中更清楚地解释我的意思:

 internal static List<long> GetPrimeFactors(ulong number)
 {
 var result = new List<ulong>();
 while (number % 2 == 0)
 {
 result.Add(2);
 number = number/2;
 }
 var divisor = 3;
 while (divisor <= number)
 {
 if (number % divisor == 0)
 {
 result.Add(divisor);
 number = number/divisor;
 }
 else
 {
 divisor += 2;
 }
 }
 return result;
 }

上面的代码返回给定数字的所有主要因子。ulong具有 64位,表示可以接受 0至 18,446,744,073,709,551,615之间的值 !

那么,当有数百万个生产功能的测试用例时,TDD是如何工作的 !

我的意思是有多少测试用例可以编写,以便我可以说我使用TDD来实现这个生产代码?

这里的这个概念表明,你应该只写足够的代码来传递测试,这对我来说是错误的。

足够足够了?

我自己的想法是,我只选取了一些测试用例 比如 为上带。下带和几个 比如 5测试用例,但不是 TDD 。

感谢你对本例中的TDD的思考。

时间:原作者:0个回答

117 0

这是一个有趣的问题,与 falsifiability的概念有关,在认识论中。使用单元测试,你不是真正的试图证明系统的工作;。如果你的测试通过,你不知道系统工作,因为你可以能忘记了一些未测试的边缘。

科学史上的经典范例是"都是白色的"问题。无论你发现多少种不同的白天鹅,你都不能说假设"所有的天鹅都是白色的。"是正确的。另一方面,给我带一只黑天鹅,我知道这个假设是不正确。

一个好的TDD 单元测试 是沿着这些行;如果它通过,它不会告诉你,但是如果失败,它会告诉你。在这个框架中,测试每个数字并不是那么有价值的:一个例子应该足够了,因为如果它不适合那种情况,那么你知道什么是错误的。

这个问题与天鹅不同,你不能真正枚举世界上的每个天鹅和他们的父母。另外,程序比物理更接近数学,在某些情况下也可以以确认一个语句是 true 。TDD经过良好的实验,目标是捕获可以能的故障案例,而不是证明某些事情是 true 。

原作者:
...