文档章节

【JBehave】集成spring测试

一路向北的兔斯基
 一路向北的兔斯基
发布于 2016/04/20 18:49
字数 588
阅读 97
收藏 0

  通过研究网上的教程(这儿说一句,网上关于jbehave的教程确实有点少)和官网的文档,完成了基于jbehave和spring的整合测试案例,现将相关的代码发出来,供大家。

  博主后期应该会大量使用jbehave,大家有什么问题可以一起交流。


1、根据测试场景,编写相应的story。

Meta:

Narrative:
As a user
I want to login into system and i will own my right

Scenario: system admin login
Given uid is v3admin@v3 and password is 123456
When i login
Then i have role manager


Scenario: company admin login
Given uid is chenshengli@zyqckjcd and password is 123456
When i login
Then i have role company_manager

在这个story中,包含两个场景的测试,其一是系统管理员登陆,其二是公司管理员登陆


2、编写对应的step java

@Component
public class LoginSteps {

    private String uid;

    private String password;

    private User user;

    @Autowired
    private UserService userService;

    @Given("uid is $uid and password is $password")
    public void init(String uid, String password) {
        this.uid = uid;
        this.password = password;
    }


    @When("i login")
    public void login() throws V3Exception {
        System.out.println(uid + "," + password);
        this.user = userService.login(uid, password);
    }

    @Then("i have role $role")
    public void check(String role) {
        assertTrue(user.getRoles().contains(role));
    }

}

因为要集成spring,所以该类加了注解@Component,以便执行时能自动扫描到。

因为集成了spring,所以需要的userService可以通过注解@Autowired自动获取到。


3、测试主类

public class SpringTestRunner extends JUnitStories {

    private ApplicationContext context;

    public SpringTestRunner() {
    }

    @Override
    public Configuration configuration() {
        return new MostUsefulConfiguration()
                .useStoryParser(new RegexStoryParser(new ExamplesTableFactory(new LoadFromClasspath(this.getClass()))))
                .useStoryReporterBuilder(new StoryReporterBuilder().withRelativeDirectory("doc/jbehave")
                        .withCodeLocation(CodeLocations.codeLocationFromClass(getClass())).withDefaultFormats()
                        .withFormats(CONSOLE, TXT, HTML, XML));
    }

    @Override
    protected List<String> storyPaths() {
        List<String> result = new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()), "**/*.story", "");
        System.out.println("storyPaths:" + result);
        return result;
    }


    public InjectableStepsFactory stepsFactory() {
        return new SpringStepsFactory(configuration(), context());
    }

    private ApplicationContext context() {
        if (context == null) {
            context = new SpringApplicationContextFactory("v3-market.xml").createApplicationContext();
        }
        return context;
    }
}

因为是要执行所有的story测试,所以该类扩展了JUnitStories,并重写了storyPaths 方法,根据自己的情况发现并加载相应的story文件。


4、执行

JUnitStories有一个注解为@Test的run(),所以SpringTestRunner是可以直接执行的junit类,通过执行该类,将会扫描所有的story并进行相应的测试,最后生成测试报告。


5、测试报告

生成报告文件列表如下,主要的测试通过view中的index.html查看。

详细的测试结果,因为没有将jbehave-site-resources和jbehave-core-resources.zip中的内容解压到view目录下,所有看到的测试报告页面有点丑。

© 著作权归作者所有

共有 人打赏支持
一路向北的兔斯基
粉丝 7
博文 61
码字总数 24122
作品 0
成都
高级程序员
私信 提问
代码越少越干净吗?

在我眼中,干净的代码就是简单、易于理解的代码。不过分设计,模板文件尽可能地少,语义明确。那么,这样是否就意味着代码越少越干净呢? 我不这么认为。大多数情况下,更少的代码往往语义更...

manong51
2015/05/10
3
0
2014优雅代码第二线上活动会议纪要

代码链接: https://coding.net/u/wangrong/p/ElegentCode/git 开发流程的经验(可以根据自己适合的方式来做) 15号工作(大概半小时) **************************************************...

王蓉
2014/12/01
98
0
关于TDD、BDD和DDD的一些看法

在实际的项目中,我们可能随时面对各种不同的需求,它的各个方面的要素决定了我们所采用的开发模式。 比如,它的复杂度如何?所有的需求是否足够清晰?开发人员对相关的业务是否足够了解?项...

Euray
2014/11/16
0
1
Ruby 的未来

我并不是一个非常守旧的Ruby爱好者。我从2005年开始接触Ruby,那时跟我一起的还有很多极限编程(XP)的同事,我们都加入了Rails 大潮。传说很多Ruby爱好者都是在那个时代从敏捷/极限编程社区转...

oschina
2012/11/07
7.7K
70
【JBehave】通过ant执行jbehave测试

前一篇文章将jbehave和spring进行了集成,并编写了能执行的junit测试类,本篇文章将通过ant执行jbehave测试。因为已经有了junit测试类,其它剩下要做的事情就是简单的通过ant的task将SpringT...

一路向北的兔斯基
2016/04/20
31
0

没有更多内容

加载失败,请刷新页面

加载更多

Deepin 安装wireshark抓包工具

一、关于deepin和wireshark deepin目前已经发展到15.8了,开发Android毫无压力,在四个月的使用时间里,已经非常习惯了。目前想处理一些网络问题,因此尝试在deepin上安装一个抓包工具。dee...

IamOkay
21分钟前
4
0
Docker镜像仓库服务-Nexus

建立云原生集群系统,建立自己的私有Docker镜像仓库必不可少。一方面可以加快多节点部署容器镜像的下载速度,另一方面是为了安全(容器里存储有系统所有的信息、包括密码、数据库等等,切记不...

openthings
33分钟前
1
0
127.0.0.1 和 0.0.0.0 地址的区别

1. IP地址分类 1.1 IP地址表示 IP地址由两个部分组成,net-id和host-id,即网络号和主机号。 net-id:表示ip地址所在的网络号。 host-id:表示ip地址所在网络中的某个主机号码。 即: IP-a...

华山猛男
今天
21
0
解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.

把 总项目 下的 build.gradle 中的 两个 jcenter() 用 maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public/’} 代替。...

lanyu96
今天
6
0
基于redis的分布式锁

redisson提供了基于redis的分布式锁实现方式,本文就尝试了下锁的使用方式。Redisson同时还为分布式锁提供了异步执行的相关方法,第二节执行介绍。 一、可重入锁验证 同一个jvm里面同一线程的...

noob_chr
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部