• 2012-08-20

    Hello, Concordion

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/221226937.html

    Concordion是什么?它在主页上如此自我评价:

    Concordion is an open source tool for writing automated acceptance tests in Java.

    验收测试工具?你想到什么了,我想到了Cucumber,想到了那一堆的Given、When、Then。

    与Cucumber的出发点不同,Concordion要创建的是可读性更好的验收测试。一起来看看它是怎么做的:

    我们可以下载concordion的jar文件,或是根据自己的构建系统在构建文件中添加相关依赖

    接下来,就是创建我们的测试了。首先,我们要写一个HTML文件。是的,你没看错,是HTML文件。我们要创建就是一个普通的网页,换句话说,我们可以在里面根据自己的需要,不必受太多格式的限制。

    下面就是我们的HTML文件,我们要把它当做资源放到我们的classpath里:

    <html xmlns:concordion="http://www.concordion.org/2007/concordion">
    <body>

    <h1>Hello</h1>
    <p>When we say hello to <span concordion:set="#name">dreamhead</span>, it will tell us <span concordion:assertEquals="hello(#name)">Hello, dreamhead</span></p>

    </body>
    </html>
    (hello.html)

    这几乎就是我们最常见的一个HTML,只是增加了concordion命名空间。Concordion正是通过这个命名空间与我们合作的。

    在上面这段代码里,我们看到了通过concordion:set="#name",我们设置了一个名为name的变量,其值就是这个html标签的值,也就是dreamhead。后面我们做了断言:concordion:assertEquals="hello(#name)"。用name作为实参调用hello方法,其返回值与html标签里的值进行比较,在这里是Hello, dreamhead。

    大部分都好理解,只是hello方法在哪里?别急,我们要写代码呢!下面就是:

    import org.concordion.integration.junit4.ConcordionRunner;
    import org.junit.runner.RunWith;

    @RunWith(ConcordionRunner.class)
    public class HelloTest {
        public String hello(String name) {
            return "Hello, " + name;
        }
    }
    (HelloTest.java)

    这个类要放到同HTML文件一样的包里,其类名要与HTML文件相匹配,"html文件名 + Test"。

    虽然这就是一个JUnit的测试类,但不同于我们常见的测试,这里没有断言,其实,断言都写在HTML文件里,所以,这里等于给HTML文件提供的是一些支撑函数,这种做法就将测试与实现之间耦合解开了。

    运行吧,像普通JUnit测试一样,它会生成一个新的HTML文件,控制台中会给出这个文件的文件名,打开这个文件,我们不难发现,这个文件结合了测试运行的结果。

    有了对Concordion最为基础的了解,我们再回过头来看看。

    不同于Cucumber,我们根本不像在写所谓的测试用例,而更像编写一个用户手册。是的,虽然用Cucumber我们可以业务驱动开发(BDD),但实际上,大多数情况下,这些测试用例驱动完了,也就放在那里了。业务人员回过头来看的机会并不多,想把当做文档用还是有很长的距离。而Concordion则是在这个方向的另一个尝试,它让我们写手册,让业务人员来写,生成的文档就是给别人看的。

    Concordion是一种很好的尝试,效果如何,还要在实际项目中进行验证。

    分享到:
    引用地址: