gpt4 book ai didi

unit-testing - 当 TDD 测试显示需要的新功能也需要测试时该怎么办?

转载 作者:行者123 更新时间:2023-12-02 00:15:43 24 4
gpt4 key购买 nike

[编辑]: Click here在适当的网站上提出问题。

当您正在编写测试并且到了需要使测试通过的地步并且您意识到您需要一个额外的功能片段并且应该将其分离到它自己的功能中时,您会怎么做?这个新功能也需要测试,但 TDD 周期说让测试失败,让它通过然后重构。如果我正处于尝试通过测试的阶段,我不应该停下来开始另一个失败的测试来测试我需要实现的新功能。

例如,我正在编写一个具有函数WillCollideWith(LineSegment)的点类:

public class Point {
// Point data and constructor ...

public bool CollidesWithLine(LineSegment lineSegment) {
Vector PointEndOfMovement = new Vector(Position.X + Velocity.X,
Position.Y + Velocity.Y);
LineSegment pointPath = new LineSegment(Position, PointEndOfMovement);
if (lineSegment.Intersects(pointPath)) return true;
return false;
}
}

当我意识到我需要一个 LineSegment.Intersects(LineSegment) 函数时,我正在为 CollidesWithLine 编写测试。但是,我是否应该停止我在测试周期中所做的事情去创建这个新功能?这似乎打破了“红、绿、重构”原则。

我是否应该只编写检测 CollidesWithLine 函数内部的 lineSegments Intersect 的代码,并在它工作后重构它?这在这种情况下会起作用,因为我可以从 LineSegment 访问数据,但是如果这种数据是私有(private)的呢?

最佳答案

如果您按照 Kent Beck 在他的书中的定义严格遵循 TDD,那么当您遇到您也需要测试的内容时,请将其记在一张纸上(他将其称为测试列表),然后专注于当前测试。 Kent 建议您应该一次进行一项测试。

从测试优先的角度来看,您应该专注于使测试通过,这有几个选项:

  1. 在当前方法中内联编写 Intersects 的实现。 “绿色”意味着工作,而不是漂亮。工作后,重构代码和测试。

  2. 停止它。将测试替身(模拟)传入可以模拟合约的方法。

  3. 假装。当你遇到一个你需要的方法时,记下其他测试,然后写一个基本的实现(例如“return true”)

关于unit-testing - 当 TDD 测试显示需要的新功能也需要测试时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com