首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Predictive Cloud Computing 项目 Maven、单元和集成测试,以及静态代码分析-6

Predictive Cloud Computing 项目 Maven、单元和集成测试,以及静态代码分析-6

清单                10.单元测试顶部代码段的示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.ibm.ei.engine.golf;

import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;

import java.net.URL;

import javax.persistence.EntityManager;

import org.dbunit.dataset.DataSetException;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.junit.Test;

import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.io.Resources;
import com.ibm.ei.persistence.Player;
import com.ibm.ei.persistence.Site;
import com.ibm.ei.persistence.jpaloaders.Sites;
import com.ibm.ei.zepplin.H2DatabaseTestCase;




下一节将定义 Test 类。请注意,该类以 Test 结尾,这是习惯用法。这个特定的测试扩展了一个                H2DatabaseTest 案例,该案例提供了加载持久性测试和支持在 PCC 中访问这些测试的常见方法。playerIDFunction                是一种函数编程方法,用于将集合从一种格式转换为另一种格式。Test 类中的另一个部分利用了这个方法。
清单                11.单元测试顶部代码段的示例
1
2
3
4
5
6
7
8
9
10
public class XMLFeaturedGroupsTest extends H2DatabaseTestCase {

        private final Function<Player, String> playerIDFunction = new Function<Player, String>() {

                @Override
                public String apply(Player input) {
                        return input.getPlayerId();
                }

        };




下一节将定义要在单元测试期间执行的测试。@Test 注释告诉 JUnit                测试框架,此方法应该作为一个测试来执行。然后该方法向父 H2DatabaseTest 案例类请求一个                EntityManager。该类能访问持久性方法。然后该方法使用了来自 Google Guava 的 Resources                类加载 XML。完成这一步后,该方法就准备好执行测试了。首先,该测试会检查从 XML                文件加载的每个组都不是空的。接下来,执行同样的检查,以验证每个组都包含运动员,而且已加载的每个组中的运动员数量为                3。完成验证后,执行一次复合测试。使用上述函数对组 1 和组 2 的运动员列表执行转换,以便将运动员对象转换为每位运动员的                playerID。完成这一步后,单元测试框架会验证运动员 ID 列表是否等同于预期的集合。因为使用了                containsInAnyOrder 方法,所以不要求运动员按任何特定顺序进行排列。
清单                12.测试代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Test
public void testFromInputSupplier() throws Exception {

        EntityManager manager = getEntityManager();

        Site site = Sites.loadSite(manager, "masters", 2013);

        URL group = Resources.getResource("featuredGroup.xml");
        ImmutableList<FeaturedGroup> groups = XMLFeaturedGroups
                        .fromInputSupplier(manager, site, Resources.asByteSource(group));

        FeaturedGroup group1 = groups.get(0);
        FeaturedGroup group2 = groups.get(1);

        assertThat(group1, notNullValue());
        assertThat(group2, notNullValue());

        assertThat(group1.getPlayers(), notNullValue());
        assertThat(group2.getPlayers(), notNullValue());
        assertThat(group1.getPlayers().size(), is(3));
        assertThat(group2.getPlayers().size(), is(3));
        assertThat(Lists.transform(group1.getPlayers(), playerIDFunction),
                        containsInAnyOrder("20396", "1810", "10885"));
        assertThat(Lists.transform(group2.getPlayers(), playerIDFunction),
                        containsInAnyOrder("24357", "8793", "20229"));


返回列表