从BDD开始我应该写什么最小的第一次测试?

时间:2019-05-22 09:33:06

标签: tdd bdd

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

现在,我想创建第一个最低限度的测试以开始开发,但是我无法弄清楚这个测试。 这是我编写的最简单的测试(以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个类:水平(这里发生的所有事情都在容器中并检查结果),形状(进行猜测),PlayerInput(按住并释放手指),CircleSpot(扩展到时间),TimeManager(我需要假3秒钟)。

对于第一个测试,我不能说这个测试真的很简单。但是我无法想象会有更简单的测试。在这种情况下我该怎么办?

2 个答案:

答案 0 :(得分:1)

细想一想,意思是:看一看您的整体体验所需要的“构建基块”:

  • 您需要一个扩展的场所。仅仅测试您拥有如此扩展功能的测试呢?
  • 然后:该扩展点将在某个时候达到硬限制。因此,编写测试以确保斑点增加到该限制,但不能超过限制。
  • 下一件事:用户输入。编写测试以显示不断增长的形状并测试所需的用户交互(不决定赢还是输)
  • 然后,当所有这些事情都起作用时,您可以回到已经进行的测试:完整的用户体验,也许以不同的方式来代表胜利和失败的情况。

答案 1 :(得分:1)

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

仅在场景中使用时间管理器(目前始终设置为3秒)。

如果这种行为还不够丰富(当然,当然还不够!),那么接下来会发生什么情况?您能想到一个示例,其中您的游戏应该返回GameResult.Success以外的值吗?

首先以最简单的方式一次通过一个场景。如果还不够,请进行更改。

牢记您的设计类别是完全可以的,但是要使其简单,并在进行设计时进行重构。

当您分解其他类时,将把系统行为的一部分委派给那些类。有些事情会比完整的系统东西更好地表示为类的行为(例如,可能是围绕面积计算的规则),因此请从API / UI的角度(TDD)编写一个类的行为示例。这是BDD的“外向内”。

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

即使是橡皮鸭,也别忘了跟别人谈论你在做什么。