该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-07-13
Readonly 写道 ajoo 写道 不知道大家有过这个经验没有?我有100个test case,我希望一个test target运行着100个test case,但是有时候为了调试某个问题,我可能希望能够单独运行一个test case。 晕啊, 原来你的yan里面ant脚本扔那么多的target是这个缘故?? 你不会用运行期属性来指定么? <target name="junitall" depends="clean, build" description="Run all unit test"> <junit fork="yes" haltonfailure="yes"> <batchtest fork="yes" todir="${test.dir}/report"> <fileset dir="${test.dir}" includes="**/*Test.class" excludes="**/*AbstractTest.class"/> </batchtest> </junit> </target> <target name="junitone" depends="clean, build" description="Run single unit test"> <fail unless="test.name"> You must specify a test.name using -Dtest.name=NAME </fail> <echo level="info">Starting a signle unit test named '${app.name}'...</echo> <junit> <test name="${test.name}"/> </junit> </target> 运行: ant junitone -Dtest.name=com.mycomp.test.MyTest 是啊。因为我不会用junit这个task嘛。我从来都是调用java。嘿嘿。 同样因为懒得学那么多task,所以才希望每个task都最最简单,task个数也尽量少,然后用脚本组合起来实现复杂功能。 而不是每一个稍微不同点的功能都要去找新的Task。 |
|
返回顶楼 | |
发表时间:2005-07-13
ajoo 写道 ant也是,import会不分青红皂白地把target名字都import进来,这也就意味着你需要对被import的xml文件内部有多少target很清楚。耦合呀。 为什么java, c++这些语言都有私有变量?为什么它们支持以对象为名字空间?为什么obj1.x()和obj2.x()是两个不同的函数调用? ant这么做,是不得已,但是不可否认,这个import机制相当简陋。代码重用也不是这么个重用法。又回到c++的简陋的#include及至了。 这个import和include当然有很大不同了。 首先,project的重用最重要的部分就是target的重用,本来就是奔着common.xml中的target去的. 就好像你要继承一个类,本来就需要知道父类的一些东西。只不过这里的target都是 public而已。 第二个,target是可以被重新定义的,而且可以你所谓的名字空间的方式调用。比如某个project中在import xxx之后又定义了yyy,而xxx之中也有yyy,此时,可以用xxx.yyy来引用 |
|
返回顶楼 | |
发表时间:2005-07-13
ajoo 写道 是啊。因为我不会用junit这个task嘛。我从来都是调用java。嘿嘿。
同样因为懒得学那么多task,所以才希望每个task都最最简单,task个数也尽量少,然后用脚本组合起来实现复杂功能。 而不是每一个稍微不同点的功能都要去找新的Task。 为了单独测试,别人只是用了junit Task. 而neptune却需要做很多基础工作 "tests.jfun.parsec.TestColoring", "tests.jfun.parsec.TestLexer","tests.jfun.parsec.TestParser", "tests.jfun.parsec.TestRfc822", "tests.jfun.parsec.TestSqlParser" ]; make_tests = import "${properties.neptune.home}/scripts/neptune.np" .make_tests; ]; 需要在脚本中把所有的那些testcase都罗列一边,这个是不能忍受的。最好也用一个patten来搞定。 否则,每加一个testcase或者重构一下名字就需要改动配置脚本,这个脚本的稳定性也太差了。 |
|
返回顶楼 | |
发表时间:2005-07-13
Readonly 写道 晕啊, 原来你的yan里面ant脚本扔那么多的target是这个缘故??
你不会用运行期属性来指定么? <target name="junitall" depends="clean, build" description="Run all unit test"> <junit fork="yes" haltonfailure="yes"> <batchtest fork="yes" todir="${test.dir}/report"> <fileset dir="${test.dir}" includes="**/*Test.class" excludes="**/*AbstractTest.class"/> </batchtest> </junit> </target> <target name="junitone" depends="clean, build" description="Run single unit test"> <fail unless="test.name"> You must specify a test.name using -Dtest.name=NAME </fail> <echo level="info">Starting a signle unit test named '${app.name}'...</echo> <junit> <test name="${test.name}"/> </junit> </target> 运行: ant junitone -Dtest.name=com.mycomp.test.MyTest 其实maven的处理更加简单: maven -Dtestcase=..... test:single 这样就搞定了,不需要对配置文件本身做任何改动 |
|
返回顶楼 | |
发表时间:2005-07-13
charon 写道 ajoo 写道 是啊。因为我不会用junit这个task嘛。我从来都是调用java。嘿嘿。
同样因为懒得学那么多task,所以才希望每个task都最最简单,task个数也尽量少,然后用脚本组合起来实现复杂功能。 而不是每一个稍微不同点的功能都要去找新的Task。 为了单独测试,别人只是用了junit Task. 而neptune却需要做很多基础工作 "tests.jfun.parsec.TestColoring", "tests.jfun.parsec.TestLexer","tests.jfun.parsec.TestParser", "tests.jfun.parsec.TestRfc822", "tests.jfun.parsec.TestSqlParser" ]; make_tests = import "${properties.neptune.home}/scripts/neptune.np" .make_tests; ]; 需要在脚本中把所有的那些testcase都罗列一边,这个是不能忍受的。最好也用一个patten来搞定。 否则,每加一个testcase或者重构一下名字就需要改动配置脚本,这个脚本的稳定性也太差了。 呵呵。我不是不知道junit task吗?不要忘了,任何ant的task,neptune都可以直接调用。所以就算我的方法笨(恩,确实比较笨),也不妨碍你用junit task呀。 |
|
返回顶楼 | |
发表时间:2005-07-14
ajoo,为啥要用script去调用ant task,而不是写一个ant task去支持script呢:
<target name="runscript"> <!-- Run beanshell script in file--> <script language="beanshell" src="myscript.bsh"/> <!-- Run jaskell script in-line --> <script language="jaskell"><![CDATA[ auto (info.println "build done") $ do {time=now} $ info.println ("build starting at " + time) >> do {t1 = readFile "file1"} $ do {t2 = readFile "file2"} $ let diff = t2 - t1; writeFile "file3" diff end ]]></script> </target> |
|
返回顶楼 | |
发表时间:2005-07-14
应该说用ant来调用script也是可以实现的。
不过,意义有多大呢? script调ant,是把ant的task当作作基本底层工作的元件。 script本身自己不见得提供这些copy, javac, java这些功能。 (当然,可以用Command接口实现,但没什么意义这么做) script的主要作用就是胶水,把各个不同的task, command组合在一起。 都是胶水组合零件,很少听说零件要用到胶水的。 更何况,我本身是讨厌xml的,自然希望用script彻底取代xml了。 |
|
返回顶楼 | |
发表时间:2005-07-18
也许可以参考下Maven 2
Maven 2的脚本改为用script进行编写了 |
|
返回顶楼 | |