我的一位朋友正在解释他们如何在他的工作场所与TDD进行乒乓球配对,他说他们采取“对抗”的方式。也就是说,当测试编写人员将键盘交给实现者时,实现者会尝试做最简单的(有时是错误的)来使测试通过。
例如,如果他们正在测试GetName()方法并且测试检查“Sally”,则GetName方法的实现将只是:
public string GetName(){
return "Sally";
}
当然,这将通过测试(天真地)。
他解释说,这有助于消除检查特定预制值的天真测试,而不是测试组件的实际行为或预期状态。它还有助于推动更多测试的创建,最终实现更好的设计和更少的错误。
这听起来不错,但是在与他的短暂会谈中,似乎花了很长时间才通过一轮测试而不是其他方式,我觉得没有获得很多额外的价值。
你是否使用这种方法,如果是这样,你看到它得到了回报吗?
答案 0 :(得分:2)
它非常有效。
它迫使您更多地考虑要编写的测试,以便让其他程序员编写您需要的正确功能。
您经常通过键盘逐段构建代码
它可能非常累人且耗时但我发现它很少见,我必须回来修复任何代码编写的错误
答案 1 :(得分:1)
我用过这种方法。它不适用于所有对;有些人只是自然抗拒,不会给它一个诚实的机会。但是,它可以帮助您正确地进行TDD和XP。您想尝试慢慢地向代码库添加功能。你不想写一个巨大的单片测试,需要大量的代码才能满足。你想要一堆简单的测试。您还需要确保定期在对子之间来回传递键盘,以便两对都能够啮合。通过对抗配对,你可以做到这两点。简单的测试导致简单的实现,代码构建缓慢,并且两个人都参与整个过程。
答案 2 :(得分:0)
我有时喜欢它 - 但是不要一直使用那种风格。有时候会改变节奏。我觉得我不想一直使用这种风格。
我发现它是一个有用的工具,初学者可以介绍测试如何推动实现。
答案 3 :(得分:-1)
这是基于团队的个性。每个团队的个性都是其成员的总和。你必须要小心,不要以优势的方式练习被动式攻击性实施。一些开发人员对像
这样的实现感到沮丧
return "Sally";
这种挫败感会导致团队失败。我是沮丧的人之一,并没有看到它的回报。我认为更好的方法是更多的口头交流,就如何更好地实施测试提出建议。