我正在学习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秒钟)。
对于第一个测试,我不能说这个测试真的很简单。但是我无法想象会有更简单的测试。在这种情况下我该怎么办?
答案 0 :(得分:1)
细想一想,意思是:看一看您的整体体验所需要的“构建基块”:
答案 1 :(得分:1)
您的第一个答案确实不需要5个课。您只需要一个空的API或UI,以及总是返回GuessResult.Success
的东西。
仅在场景中使用时间管理器(目前始终设置为3秒)。
如果这种行为还不够丰富(当然,当然还不够!),那么接下来会发生什么情况?您能想到一个示例,其中您的游戏应该返回GameResult.Success
以外的值吗?
首先以最简单的方式一次通过一个场景。如果还不够,请进行更改。
牢记您的设计类别是完全可以的,但是要使其简单,并在进行设计时进行重构。
当您分解其他类时,将把系统行为的一部分委派给那些类。有些事情会比完整的系统东西更好地表示为类的行为(例如,可能是围绕面积计算的规则),因此请从API / UI的角度(TDD)编写一个类的行为示例。这是BDD的“外向内”。
这将帮助您保持良好的测试金字塔(大量的单元测试,很少的场景)。
即使是橡皮鸭,也别忘了跟别人谈论你在做什么。