Testing 在测试之前,您倾向于编写多少代码?

Testing 在测试之前,您倾向于编写多少代码?,testing,Testing,多年来,我注意到,我倾向于编写一个可能充满代码的屏幕,然后进行测试,以确保它做了它应该做的事情 这种技术的一些好处是 语法错误是新代码的结果, 因此,你不必寻找太远的原因 设置一个临时条件是很便宜的,它可以让你测试其他的 子句,因此您可以确保获得错误消息, 当测试成本较低时,这类测试是正确的 您倾向于如何编写代码? 这样做有什么好处? 编辑:像我的大多数问题一样,我真的没有很好地设置上下文。我并不是说单元测试级别的粒度。我指的是在实现时确保本地代码完全符合我的要求。我想说我总是在编写相应的代码以

多年来,我注意到,我倾向于编写一个可能充满代码的屏幕,然后进行测试,以确保它做了它应该做的事情

这种技术的一些好处是

语法错误是新代码的结果, 因此,你不必寻找太远的原因

设置一个临时条件是很便宜的,它可以让你测试其他的 子句,因此您可以确保获得错误消息, 当测试成本较低时,这类测试是正确的

您倾向于如何编写代码?
这样做有什么好处?


编辑:像我的大多数问题一样,我真的没有很好地设置上下文。我并不是说单元测试级别的粒度。我指的是在实现时确保本地代码完全符合我的要求。

我想说我总是在编写相应的代码以通过它之前编写单元测试,但我是在撒谎。

我想说我总是在编写相应的代码以通过它之前编写单元测试,但是我在撒谎。

我倾向于编写代码,直到我有了能够产生定义良好的可观察行为的东西。通常,这是一个单一的公共API函数,有时是一个完整的类。这也鼓励我将问题分解为具有定义良好的可观察行为的小函数。我的大多数功能都比全屏小。如果一个函数太复杂而无法测试,那么从其他角度来看,它可能设计得很糟糕。

我倾向于编写代码,直到我有了能够产生定义良好的可观察行为的东西。通常,这是一个单一的公共API函数,有时是一个完整的类。这也鼓励我将问题分解为具有定义良好的可观察行为的小函数。我的大多数功能都比全屏小。如果一个函数太复杂而无法测试,那么从其他角度来看,它可能设计得很糟糕。

取决于项目的大小/规模。如果它是一个很短的程序(编译和运行起来很简单),我会尽早测试它,并且经常在我添加任何新功能时进行测试。这让我能够快速捕捉到大多数错误

在一个大型项目(公司规模)中,如果可以的话,我会像这样单独测试我的作品。否则,请注意对这些日常构建的测试


简而言之,尽可能多地测试,只要编译/运行时间不会花太长时间,你就可以考虑参加办公室剑术! 取决于项目的规模/规模。如果它是一个很短的程序(编译和运行起来很简单),我会尽早测试它,并且经常在我添加任何新功能时进行测试。这让我能够快速捕捉到大多数错误

在一个大型项目(公司规模)中,如果可以的话,我会像这样单独测试我的作品。否则,请注意对这些日常构建的测试


简而言之,尽可能多地测试,只要编译/运行时间不会花太长时间,你就可以考虑参加办公室剑术! 我倾向于测试程序的每个功能。不是每个函数,而是形成特征的一系列函数。
这样做的好处是,我没有太多的开销来测试每个函数,而是在每个函数之后进行测试。

我倾向于测试程序的每个功能。不是每个函数,而是形成特征的一系列函数。
这样做的好处是,我没有太多的开销来测试每个函数,而是一个接一个地进行测试。

我现在参与的项目应该是先进行单元测试,然后再进行开发,大部分情况下是这样的,但有时编写测试的人和实现测试的人并不总是在同一页上


所以我喜欢用一个单元测试来检查所需方法的主要功能,然后让实现代码的人编写几个单元测试来检查代码的各个方面。

我现在参与的项目应该是先进行单元测试,然后再进行开发,而且在大多数情况下,但有时编写测试的人和实现测试的人并不总是在同一页上


因此,我喜欢用一个单元测试来检查所需方法的主要功能,然后让实现代码的人编写几个单元测试来检查代码的各个边缘。

这听起来可能很傻,但我通常在每次“处理任务”之后测试我编写的代码。也就是说,如果我打开一个文件,我会测试例程。如果我连接到一个数据库并取出一条记录,我将测试该例程。或者有时我写一个测试,只是练习一个类的所有方法,看看它们是否有效


我不认为我使用了硬性或快速的规则,但大多数情况下,当我编写代码来执行任务时,我会进行测试以“验证”它是否执行了它应该执行的操作。

这听起来可能很愚蠢,但我通常会在每次“处理任务”之后测试我编写的代码。也就是说,如果我打开一个文件,我会测试例程。如果我连接到一个数据库并取出一条记录,我将测试该例程。或者有时我写一个测试,只是练习一个类的所有方法,看看它们是否有效


我不认为我使用了硬性或快速的规则,但大多数情况下,当我编写代码来执行任务时,我会测试以“验证”它是否完成了它应该做的事情。

尽我所能。有时这意味着几百行,特别是如果我在现有框架中添加一个大型系统,而应用程序如果没有它的一部分甚至无法运行


我想我会尽可能遵循测试的原则。显然,这并不意味着写循环已经完成了一半,但当我完成循环后,我会在继续之前尝试一下。自上次测试以来更改的越少,就越容易找出导致错误情况的更改内容。:)

正是我所需要的。有时这意味着几百行代码,特别是当我在现有框架中添加一个大型系统时,如果没有一些pa,应用程序甚至无法运行
sum
    "sum up all elements.
     This is implemented using a variant of the normal inject:into: pattern. 
     The reason for this is that it is not known whether we are dealing with number
     (i.e. if 0 is a good initial value for the sum). 
     Consider a collection of measurement or physical objects, 0 would be the unitless 
     value and would not be appropriate to add with the unit-ed objects."

    | sum sample |

    sample := self anElement.
    sum := self inject: sample into: [:accum :each | accum + each].
    ^ sum - sample.

    "
     TestCase should: [ { } sum ] raise:Error.
     TestCase should: [ ''  sum ] raise:Error.

     TestCase assert: ( { 1 } sum = 1 ).
     TestCase assert: ( { 1. 2. 3. 4. } sum = 10 ).
     TestCase assert: ( (1 to:10) sum = 55 ).
     TestCase assert: ( 'abc' asByteArray sum = 294 ).

     TestCase assert: ( { 10 +/- 2.
                          20 +/- 4.
                         100 +/- 10 } sum = (130 +/- 16) ).

     TestCase assert: ( { (1 / 9).
                          (1 / 7).
                        } sum = (16 / 63) ).
    "