`
xnnyygn
  • 浏览: 42761 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用cactus测试ssh应用(1)

阅读更多
最近拿到了《Junit In Action》,书中提到了Cactus测试容器的方法。由于自己在创建ssh应用,一直找不到好的办法来测试,所以打算使用cactus进行测试。

测试的过程是痛苦的……

首先按照书上的例子进行测试。因为是我的应用是struts为前端的,所以ServletTestCase完全是碰运气。不出所料,失败。然后习惯性的去网上找资料。

首先找到比较适合我的是
http://blog.csdn.net/jingmin/archive/2006/11/17/1393149.aspx

我注意到了上面所写的CactusStrutsTestCase,搜索了一下,出现了以前看到过的StrutsTestCase这个Jar。事实上,到现在,我还是没有使用CactusStrutsTestCase,而是使用了MockStrutsTestCase。原因主要在于CactusStrutsTestCase一直要我提供Config,而我不知道这个Config指的是什么(现在我明白了这个Config可能指的是web.xml和struts-config.xml)。

选择使用CactusStrutsTestCase或者MockStrutsTestCase还有一些犹豫。这两个对于我来说都是新的事物,我能想到的办法是去找资料然后帮助我选择。到这里的时候基本上已经离开《Junit In Action》这本书的指导了,而是自己去找资料。不过按照自己找到的资料,自己总是遇到这样那样的问题,主要是一些类没有找到(Jar包没有导入,Cactus1.81的包有很多,我不想全部导入),还有一个现在看来是类冲突的,是Jasper-runtime还有一个Jasper-compile和tomcat的类冲突。其次,网上都是没有完全说明在什么环境下,离开IDE而讲述的,所以最终还是失败了。

为了不影响自己的正式应用,我重新建立了一个工程FirstCactus,然后在Firefox中Bookmark All Tabs...保留自己之前所打开的页面,回到Cactus的主页,查看他是否有Quick Start。还好,我找到了比较正式的Quick Start。我按照里面的步骤来完成测试,不过很遗憾,还是失败了。首先我没有明白Cactus的启动方法,不是那种纯理论,而是如何从IDE中启动的方法,这个在《Junit In Action》中并没有说明。最后我在cactus的官方网站上找到how to start,了解到其实有两种,一种是远程服务器端使用servlet启动,另外一种就是使用suite,我最后选择的是后一种,因为还需要和jetty整合。不过我在FirstCactus中使用的是第一种,等会儿看图片就明白了。

其次,我的IDE是NETBEANS,而不是Eclipse,这里的最大的区别是NETBEANS是把SRC和TEST分开的,而这里,分开之后,应用的WEB-INF的classes下其实是不会有Test包下编译的源文件的(默认ANT脚本下),另外一个TEST的LIB也不会复制到应用WEB-INF的lib下的。那么我只能去找找看cactus和netbeans整合的教程。

搜索引擎找到的内容,其实不是很有用,有一篇netbenas 4.1版本的整合cactus教程(具体地址忘记了),其中我比较在意的是其中的ant脚本,虽然我对于ant脚本不是很熟悉,依赖于netbeans的自动构建,但是一小段的话,我还是能看懂的,其主要意思是把test包里面编译好的类复制到应用的classes中。不过好像因为netbeans版本不同,所以实际上他里面的复制脚本是有错误的,这个倒是其次,问题是我不知道这个脚本是否调用了……

一般来说如果我直接点Run的话,貌似并没有把所有类都编译,所以说假如我要编译所有类,就必须点Build,但是事实却是test里面的类并没有复制过去。之前为了按照cactus上的教程完成的调用,首先成功了一次,图片如下:

然后在我想把测试代码和应用代码分开的时候,测试代码却没有编译(在netbeans中,没有编译的类的图标右下角有一个小扳手,反之则没有)。无奈之下,我胡乱尝试菜单中的命令,在点到Build下面的Test的时候,突然发现,测试类编译了,而且被复制了。被复制了是从文件夹的名字上看出来了,因为是那个错误的名字。我稍微整理下思路,netbeans把test和应用代码分开,假如我要在应用中测试的话,必须把代码复制过去才行。如果单纯是这样的话,我其实可以把测试代码保留在Test包中,另外一个重要原因是测试所使用的Lib实际上是不会复制到应用的Lib下的,所以,我觉得还是把一部分测试代码放在应用代码一起,到时候build之后手动删除(因为是带有CVS的应用,编辑器中其实是无法完全删除源代码文件夹的,因为下面是有CVSROOT的)。

决定了这个之后,开始尝试Jetty和Cactus的整合,使用的测试还是之前成功的那个ServletTestCase。《Junit In Action》实际上给出了大部分代码,但是因为我是跳着看书的,所以不知道该怎么启动这个Jetty,在netbeans中貌似是不支持jetty替换server,所以我还是考虑用cactus quick start中提到的测试启动入手。仍旧从网上寻找代码,找到了所谓的junit.textui.TestRunner.run(...)方法,其实这个在《Junit In Action》上有提到,不过我没有注意,习惯了IDE的自动TestCase了……然后在不启动tomcat的情况下测试出来的结果:


(为了防止文字过长而被截掉,分开发二)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics