GoolgeAppEngine Web开发之单元测试环境的搭建

简介:

一个好的编写程序的习惯,每写一小段代码(比如一个方法或者更小)就测试一下的他的正确性。倘若等到所有代码都写完了再去测试的话,那么等待你的将是无尽的烦恼与纠结。

GAE项目之中,按照以往的习惯引入Junit jar文件,新建test源码目录,新建测试用例,执行。可是预想之中的结果却没有出现,出现的反而是一个令人郁闷的异常。java.lang.NullPointerException: No API environment is registered for this thread.虽然本人也不喜欢看异常,但还是要硬着头皮把它看完。它说“没有API环境被注册到当前线程”。什么意思?似乎是缺少单元测试运行时的环境。看来只能使用最原始的方法了。新建main方法并执行。Oh,my god!竟然还是这个异常。这到底是怎么回事儿?

将单元测试中代码全部注释掉,执行。没有异常,执行正常。于是乎一点点的排查,终于发现只要用到gae数据操作就会出现这个异常。看来问题是出在了gae的数据操作上。想了想,觉得可能是如下的原因:

GAE 所提供的只是数据实体及其以上的操作,而再往下的底层物理数据操作是不对应用程序开放的,这些操作是有GAE平台去完成的。这就好像是用JPA去访问数据库,可是光有实体类而没有数据库一样。因为数据库再别人得服务器上,而且你不能直接连接到数据库。

而现在这个“数据库”(gae使用的不一定是数据库)就是在GAE的服务器上。显然,GAE作为一个又不少开发者使用的平台不可能会考虑不到这种情况。而程序直接本地运行没有出问题更说明了这一点。说明了是可以在本地去模拟服务端的“数据库”以及“数据库”的底层操作的。下面要做的就是……

gae文档,终于在一个不起眼的地方找到了有关gae单元测试环境搭建的说明。上面说需要将额外的几个包引入到当前项目中。这几个包如下:

${SDK_ROOT}/lib/impl/appengine-api.jar

${SDK_ROOT}/lib/impl/appengine-api-labs.jar

${SDK_ROOT}/lib/impl/appengine-api-stubs.jar

${SDK_ROOT}/lib/testing/appengine-testing.jar

前面的${SDK_ROOT}表示GAE SDK的更目录。导入之后竟然还需要手动的去加载这些环境,好在不是很复杂.需要在每个测试类中加入如下代码:

private final LocalServiceTestHelper helper =

        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());

 

    @Before

    public void setUp() {

        helper.setUp();

    }

 

   

    @After

    public void tearDown() {

        helper.tearDown();

}

从类名可以看出来是要加载本地测试配置。现在再执行一遍,终于通过了。可是如果在每个测试类里面都要写上这么一些一模一样代码,每个人都不会愿意的。所以可以新建一个GAE单元测试基类,然后让所有的gae单元测试类都继承这个基类就可以省掉这些麻烦了。

另外,单元测试的数据都是临时产生的。每个测试方法执行前都要先插入数据。测试方法执行完成后,数据会自动被清空。



本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/662374,如需转载请自行联系原作者

相关文章
|
4月前
|
人工智能 安全 网络安全
Burp Suite Professional 2025.5 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件
Burp Suite Professional 2025.5 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件
163 3
|
2月前
|
机器学习/深度学习 存储 算法
强化学习算法基准测试:6种算法在多智能体环境中的表现实测
本文系统研究了多智能体强化学习的算法性能与评估框架,选用井字棋和连珠四子作为基准环境,对比分析Q-learning、蒙特卡洛、Sarsa等表格方法在对抗场景中的表现。实验表明,表格方法在小规模状态空间(如井字棋)中可有效学习策略,但在大规模状态空间(如连珠四子)中因泛化能力不足而失效,揭示了向函数逼近技术演进的必要性。研究构建了标准化评估流程,明确了不同算法的适用边界,为理解强化学习的可扩展性问题提供了实证支持与理论参考。
118 0
强化学习算法基准测试:6种算法在多智能体环境中的表现实测
|
4月前
|
监控 安全 测试技术
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
133 14
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
|
4月前
|
人工智能 安全 网络安全
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
225 4
Burp Suite Professional 2025.5 for Windows x64 - 领先的 Web 渗透测试软件
|
5月前
|
安全 测试技术 Linux
Acunetix v25.4 发布 - Web 应用程序安全测试
Acunetix v25.4 (Linux, Windows) - Web 应用程序安全测试
172 3
Acunetix v25.4 发布 - Web 应用程序安全测试
|
5月前
|
安全 Linux API
Burp Suite Professional 2025.4 发布 - Web 应用安全、测试和扫描
Burp Suite Professional 2025.4 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
263 6
Burp Suite Professional 2025.4 发布 - Web 应用安全、测试和扫描
|
4月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
86 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
4月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
6月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
1133 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!