首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >集成测试和测试驱动开发

集成测试和测试驱动开发
EN

Stack Overflow用户
提问于 2010-08-13 18:14:36
回答 6查看 1.6K关注 0票数 1

我有一个关于tic tac toe游戏的第一个集成测试:

代码语言:javascript
运行
复制
[TestClass]
public class FirstIntegrationTest
{
    [TestMethod, TestCategory("Integration Tests")]
    public void Standard_TicTacToe_Game_PlayerO_Wins()
    {
        IPlayer playerO = new Player();
        IPlayer playerX = new Player();

        Game game = new Game(playerO, playerX);
        game.Start();

        playerO.Play(new Point(0, 0));
        playerX.Play(new Point(2, 2));
        playerO.Play(new Point(1, 0));
        playerX.Play(new Point(1, 2));
        playerO.Play(new Point(2, 0));

        Assert.IsTrue(game.IsOver);
        Assert.IsTrue(playerO.HasWon);
        Assert.IsFalse(playerX.HasWon);
    }
}

稍后,我将添加至少另一个负责向用户显示游戏棋盘的插件。对于当前版本,我只对上面显示的内容感兴趣。

当做集成测试时(我想这是集成测试?)我应该做什么样的单元测试?为了让集成测试通过,我应该只做最小的测试吗?如果是这样,我只需要让Game类将其第一个IPlayer HasWon设置为true,将第二个设置为false。如果我通过集成测试来驱动我的设计,那么单元测试到底有什么意义呢?

我的想法是,一般来说,你没有太多的集成测试。那么,我应该通过集成测试还是单元测试来驱动我的设计呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-13 18:37:47

算法总是最难测试的,因为为了真正确保它的工作,你必须测试所有可能的组合。实事求是地说,这取决于你来决定在哪里划线。

这里你得到的是一个高水平的验收测试。

可能的单元测试包括:

  • 确保玩家只能轮流获胜玩家不能同时在垂直方向上标记coordiate
  • ensure ,对角和水平方向都被识别(可以在此处测试所有8种可能性)
票数 2
EN

Stack Overflow用户

发布于 2010-08-13 18:26:14

我不把它叫做集成测试,对我来说,它更像是一个Build Verification Test。在构建之后运行的简短而基本的测试,如果组件适合的话。涉及每个模块的测试。因此,您可以测试是否可以创建玩家、创建游戏和玩脚本游戏。

集成测试将包含更多关于模块之间接口(csci)的测试。

单元测试在BAT和集成测试之后。它们确保至少编译单元中的所有公共方法都能按预期工作,并正确处理错误的输入。

所以,是的,你将会有更多的方法被单元测试覆盖。

Game类的构造函数的单元测试示例:

代码语言:javascript
运行
复制
   IPlayer playerO = new Player();
   IPlayer player1 = new Player();
   IPlayer player2 = new AnotherImplOfIPlayer();

   Game game0 = new Game(player0, player1);   // this should work
   Game game1 = new Game(player0, player2);   // this should work
   Game game2 = new Game(null, null);         // exception thrown?    
   Game game3 = new Game(player0, player0);   // exception thrown?

单元测试验证编译单元是否正确。您已经对编译单元提出了一些要求(编写或记住),并验证了这些要求。完全独立于更高级应用程序的功能。为什么?因为您可能想要在其他项目中重用编译单元,并希望确保此编译单元是无错误的(关于单元规格)。

BVT验证构建过程是否正确和完整。它验证它是否生成了可执行的应用程序。

功能测试的目标是整个应用程序的功能需求。许多功能测试不是自动的,而是使用编写的测试脚本并由测试人员执行。

票数 2
EN

Stack Overflow用户

发布于 2010-08-13 18:35:13

我认为这是一个很好的集成测试,你需要对公开的公共方法的特定行为进行单元测试,也就是说,如果一个玩家玩了两次相同的运动怎么办?谁应该为这种情况不发生负责?

代码语言:javascript
运行
复制
public void cannotPlaySameMovementTwice() {
    playerO.Play(new Point(0, 0));
    playerX.Play(new Point(0, 0));
    // You should assert some exception result here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3475908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档