C# 集成测试与TDD
我有一个tic-tac-toe游戏的第一个集成测试:C# 集成测试与TDD,c#,java,unit-testing,tdd,C#,Java,Unit Testing,Tdd,我有一个tic-tac-toe游戏的第一个集成测试: [TestClass] public class FirstIntegrationTest { [TestMethod, TestCategory("Integration Tests")] public void Standard_TicTacToe_Game_PlayerO_Wins() { IPlayer playerO = new Player(); IPlayer player
[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);
}
}
稍后,我将添加至少另一个,负责向用户显示游戏的棋盘。对于当前的一个,我只对上面显示的内容感兴趣
在进行集成测试时(我想这是一个集成测试),我应该做什么样的单元测试?我应该只做最低限度的测试来通过集成测试吗?如果是这样,我只需要让游戏
类将其第一个IPlayer
haswoon
设置为true,第二个设置为false。如果我通过集成测试来推动我的设计,那么单元测试到底有什么意义呢
我的想法是,一般来说,您没有太多的集成测试。那么,我应该通过集成测试还是单元测试来驱动我的设计呢?我不会称之为集成测试,对我来说,它更像是一个测试。如果组件装配在一起,则在构建测试之后运行的一个简短的基本测试。涉及每个模块的测试。因此,您可以测试是否可以创建玩家、创建游戏和玩脚本游戏 集成测试将包含更多关于模块间接口(csci)的测试 单元测试低于BAT和集成测试。它们确保编译单元中至少所有公共方法都能按预期工作,并正确处理错误输入 是的,单元测试将涵盖更多的方法 游戏类构造函数的单元测试示例:
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验证构建过程是否正确和完整。它验证是否生成了可执行的应用程序
功能测试针对完整应用的功能要求。许多功能测试不是自动的,而是通过编写测试脚本完成的,由测试人员执行。我不把它称为集成测试,对我来说,它更像是一个测试。如果组件装配在一起,则在构建测试之后运行的一个简短的基本测试。涉及每个模块的测试。因此,您可以测试是否可以创建玩家、创建游戏和玩脚本游戏 集成测试将包含更多关于模块间接口(csci)的测试 单元测试低于BAT和集成测试。它们确保编译单元中至少所有公共方法都能按预期工作,并正确处理错误输入 是的,单元测试将涵盖更多的方法 游戏类构造函数的单元测试示例:
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验证构建过程是否正确和完整。它验证是否生成了可执行的应用程序
功能测试针对完整应用的功能要求。许多功能测试不是自动的,而是通过编写测试脚本完成的,并由测试人员执行。我认为这是一个很好的集成测试,您需要对公开的公共方法的特定行为进行单元测试,即,如果一个玩家玩同一个动作两次怎么办?谁对这种情况不发生负责
public void cannotPlaySameMovementTwice() {
playerO.Play(new Point(0, 0));
playerX.Play(new Point(0, 0));
// You should assert some exception result here
}
我认为这是一个很好的集成测试,您需要对公开的公共方法的特定行为进行单元测试,例如,如果一个玩家玩同一个动作两次会怎么样?谁对这种情况不发生负责
public void cannotPlaySameMovementTwice() {
playerO.Play(new Point(0, 0));
playerX.Play(new Point(0, 0));
// You should assert some exception result here
}
算法总是最难测试的,因为要真正确保它有效,你必须测试所有可能的组合。现实地说,这取决于你决定在哪里划界 这里是一个高级验收测试 可能的单元测试包括:
- 确保玩家只能交替轮换
- 确保玩家不能同时标记坐标
- 确保在veritcal、对角线和水平方面的胜利得到认可(可在此测试所有8种可能性)
- 确保玩家只能交替轮换
- 确保玩家不能同时标记坐标
- 确保在veritcal、对角线和水平方面的胜利得到认可(可在此测试所有8种可能性)
- 算法总是最难测试的,因为要真正确保它工作,你必须测试所有可能的组合。现实地说,这取决于你决定在哪里划界
这里是一个高级验收测试
可能的单元测试包括: