1

我刚刚发现了测试驱动开发,我真的很喜欢它的外观并想开始,但是我的脑海中似乎有一个主要问题。与我看到的大多数其他负面评论不同,例如启动速度慢或增加了额外的时间等(我不同意这些观点)。我的问题是它看起来很……笨重。

这就是我的意思。

如果我要编写一个测试(使用 python 和 pytest)

def multiply_3_4():
    answer = 3 * 4
    assert answer == 12 

您编写空测试并使其因空而失败。然后你填写代码让它通过。

但是我的问题是,好的,所以你现在有工作代码,然后你将工作代码块从测试函数复制并粘贴到你的主程序中?您进行了一些更改,然后将该部分复制回测试功能以重新测试它以确保您没有破坏任何内容并再次复制回主程序等?

在我看来,这有点脱节/笨拙或不无缝。有没有办法让你的测试链接到你的应用程序代码中,比如有标签,比如

# Test 1 starts here
code
code
code
# Test 1 ends here

然后测试功能将看到这一点并使用该代码块运行测试,使其更加无缝体验。

不容易复制和粘贴错误或在文件和测试函数之间复制代码等混乱。

所以我的问题是,我说的对吗?或者是否有特定类型的工作流以更优雅/无缝的方式在测试和实际应用程序代码之间进行?

这是让我远离 TDD 的唯一原因。

4

2 回答 2

3

在您的测试文件中:

import myprog

def test_multiply():
    answer = myprog.multiply()
    assert answer == 12 

在 myprog.py 中:

def multiply():
    return 3*4

不应该有复制粘贴。只导入。

在任何阶段,您都应该能够只运行您的单元测试,并且它应该给您反馈您的程序的哪些部分正在工作或需要工作。


为了使您的程序既可导入又可运行,您可以使用以下一般结构编写程序:

<import statements>
define CONSTANTS
Class and function definitions
if __name__ == '__main__':
    main()

if __name__ == '__main__':套件将在程序运行时执行,但不会在导入程序 qua模块时执行。因此,不需要在模块级别挂出任何不可测试的代码。

于 2013-08-14T12:28:40.013 回答
0

除此之外,还有一种称为TDD 的技术,正如你的意思,它遵循你尝试使用的东西。

您在同一个文件中编写代码和测试,在您获得绿色状态后,只需将代码移动到它应该在的实际位置。

我已经尝试过了,有时效果很好,特别是如果我只是想快速尝试一些东西。使用现代 IDE 和重构工具,将代码移动到另一个方法或类相当容易。

但是,当您刚开始使用 TDD 时,请不要为此烦恼 :) 坚持经典规则!

于 2013-08-22T07:30:12.943 回答