【问题标题】:What minimal first test I should write to start in BDD?从 BDD 开始,我应该编写什么最小的第一个测试?
【发布时间】:2019-05-22 09:33:05
【问题描述】:

我正在学习 BDD 并尝试制作非常简单的游戏。玩家看到一些多边形形状,需要通过扩大圆点来猜测它的面积。要猜测玩家需要在屏幕(手机游戏)上按住手指一段时间才能将圆圈扩大到所需的大小。如果圆圈的区域靠近形状区域,则该玩家获胜。

现在我想创建第一个最小测试来开始开发,但我无法弄清楚这个测试。 这是我写的最简单的测试(bdd 风格):

public partial class GuessShapeSize_Feature
    {
        [Test]
        public void RightGuess_Scenario()
        {
            Given_expanding_spot_expand_speed_is (5.0f);
            Given_shape_has_area_of (15.0f);
            When_player_holds_finger_for_seconds (3.0f);
            Then_player_guess_result_is (GuessResult.Success);
        }
    }

这里的问题是它是一个复杂的测试,需要大约 5 个类:Level(这里发生的所有事情的容器并检查结果)、Shape(猜测)、PlayerInput(按住和松开手指)、CircleSpot(扩展时间),时间管理器(我需要假3秒过去)。

对于第一次测试,我无法将这个测试命名为非常简单。但我无法想象任何更简单的测试。在这种情况下我该怎么办?

【问题讨论】:

  • 你的答案有什么问题吗?你需要更多的信息?如果没有,请考虑在某个时候接受其中一个答案?

标签: tdd bdd


【解决方案1】:

第一个答案并不需要 5 节课。您只需要一个空的 API 或 UI,以及 总是 返回 GuessResult.Success 的东西。

时间管理器只能在场景中使用(并且现在始终设置为 3 秒)。

如果这种行为不够丰富(当然不是!)那么接下来会发生什么情况?你能想出一个例子,你的游戏应该返回 GameResult.Success 以外的东西吗?

首先以最简单的方式一次制作一个场景。不够用就换吧。

将设计的类牢记在心绝对没问题,但要使其简单,并在您满足该设计时进行重构。

当您分解其他类时,您会将部分系统行为委托给这些类。有些东西会比完整的系统东西更好地表示为类的行为(例如,可能是围绕面积计算的规则),所以写一个从 API / UI 的角度(TDD)来看类如何行为的示例。这就是 BDD 的“由外而内”。

这将帮助您保持良好的测试金字塔(大量单元测试,少数场景)。

不要忘记和别人谈谈你在做什么,即使它是一只橡皮鸭。

【讨论】:

    【解决方案2】:

    从小处着眼,意思是:查看您的整体体验所需的“构建块”:

    • 您需要一个扩展点。一个简单地测试你有这样一个扩展的东西的测试呢?
    • 那么:这个扩展点将在某个时候达到硬性限制。因此,编写一个测试以确保该点增长到该限制,但不能超过。
    • 下一件事:用户输入。编写一个显示不断增长的形状的测试并测试所需的用户交互(不决定输赢)
    • 然后,当所有这些事情都奏效时,您就可以回到您已经拥有的测试:完整的用户体验,可能以不同的方式来代表输赢的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 2013-08-07
      • 2011-11-10
      • 1970-01-01
      相关资源
      最近更新 更多