在使用actor模型的游戏后端框架中添加单元测试
来源:互联网 发布:mac无法抹掉u盘 编辑:程序博客网 时间:2024/06/05 09:10
一直在思考如何在flsg这个使用Actor模型的后端页游框架中加入单元测试。
单元测试
首先,我们要定义单元和测试这两个概念。通常单元都是指以类为单位, flsg中也不例外,但是由于flsg使用actor模型,我们可以将一个actor视为一个单元,当然每个actor其实也是一个类,但不是每个类都是一个actor。在非actor类中一样可以添加单元测试,但这与其他代码中的单元测试并没有多大区别,我们今天主要讨论的是针对actor的单元测试。
结果判定
测试,我们需要定义正确和错误。测试普通类的函数只需要测试返回值或者内部状态中的改变,而测试actor类中的方法则有不少区别。
actor 中一般的方法都是Request-Rsponse模式,即接到一个request, 返回一个response。所以测试的第一点是需要比较response的异同,现在游戏中没有比较response的函数,需要添加。
另外,actor中的请求一般还会依赖GameServer类的一些方法,比如sendMessage,broadcast等等,所有需要实现一个GameServer的mock类,来进行测试。
第三点,actor中的请求会衍生出其他请求,这个请求可能是向当前或者其他actor提出。这种请求又分为两类,第一类是同步请求,得到请求结果后再返回response,对该情况进行测试就是第一种测试情况,直接测试response。第二类是异步通知,该情况下该请求不会等待通知的返回结果,所有需要直接对发出的通知进行测试。在我看来对异步通知最后的测试方法是随后加载相应ghost的信息,查看异步通知是否执行正确。这样就不需要改一堆加载不同actor的方法。
外部依赖
上面段落已经定义了单元和测试,下面就有谈一谈单元测试所依赖的外部环境如何解决。
表格
首先,游戏依赖于策划所配的表格。这个还是比较容易解决的,只需要维护一份固定不变的测试表格就ok了。具体到游戏中,配置下测试表格所在路径就行。
数据库
另外,游戏还依赖于数据库。对于数据库的依赖有两方面,一方面是从数据库读取数据,一方面是想数据库写入数据。由于flsg中数据库服务是一个单独进程,所以可以在原来的数据库服务的基础上重新写一个数据库stub服务。并且可以在数据库stub中可以在测试最后验证是否全部存到数据库中。从数据库读取的数据可以在stub中写死,这样可以保证每层测试都是基于同样的数据进行。而且这样就不需要给actor添加额外的初始化接口,可以沿用正常流程中的使用数据库内容进行初始化。但是这么做有个很明显的缺点,那就是后面的测试会依赖前面测试的数据,这样依赖太严重。由于数据库数据也是以请求的消息发送给actor,所以可以在每项测试前为该项测试重新初始化相关数据。
- 在使用actor模型的游戏后端框架中添加单元测试
- 下一代的 Actor 模型框架 Proto Actor
- Kilim框架的Actor并发模型
- Kilim框架的Actor并发模型
- 在android中使用单元测试框架
- 对于akka中,actor模型的理解。
- Actor模型的本质
- Actor模型的本质
- 玩家角色Actor在玩游戏时通常会选用不同的装备Equip获得能力,在spring中完成Equip装备->Actor的注入
- libGDX中Stage,Actor,Action的使用
- 使用scala的actor模型实现并发的例子
- 在游戏的SKScene中添加Button
- 在Spring MVC中添加一个后端接口需要添加的代码
- Yii框架的单元测试中使用Fixtures详解
- Eclipse 3.1 中使用TestNG:基于注释的单元测试框架
- JUnit单元测试框架的使用
- JUnit单元测试框架的使用
- JUnit单元测试框架的使用
- CentOS-7.0.中安装与配置Tomcat-7的方法
- Guava学习笔记:Immutable(不可变)集合
- 极乐小程序榜单(第六期)
- 【模板】组合数求余--lucas定理
- redis入门以及与python 的简单交互(windows环境)
- 在使用actor模型的游戏后端框架中添加单元测试
- 九度1124:digital root
- CGI简介
- 树莓派3 启动那些事
- 自定义ViewGroup实现自动换行---FlowLayout
- 使用字符流、客户端读取文本文件发送至服务端
- JAVA环境变量的配置
- Python requests 安装与开发
- Linux Centos 6.5_x86安装Nginx