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

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

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

单元和集成测试测试是软件开发实践的一个重要部分。PCC                项目中实现了单元和集成测试。单元测试是验证一小部分功能的快速测试。集成测试可能更慢,并验证了系统组件之间的交互。单元和集成测试都是使用 JUnit                来执行的。
Apache Maven 构建系统规定了项目中的测试位置和布局。单元测试位于项目的 src/test/java 子目录中。集成测试位于项目的                src/integration-test/java 子目录中。测试期间要使用的资源放在 test 或 test-integration 目录的                resources 子目录中。资源是可供单元和集成测试使用的非源文件。例如,资源可能包含 xml 配置数据。根据惯例,单元测试文件名以                Test.java 结尾,集成测试文件以 IT 开头并以                Test.java 结尾。
图 3.单元和集成测试文件的布局要执行单元测试,可使用命令行 mvn test 调用 Maven。要执行集成测试,可使用命令行                mvn integration-test。这将一直执行到 Maven 构建流程的测试和集成测试阶段(含)的所有阶段。
对于 PCC,我们使用了 JUnit 框架来执行单元测试。JUnit 测试案例像常规 Java                代码一样执行,但应用了一组断言来验证所测试的代码能正常运行。此外,我们利用了 Hamcrest 匹配器 (matcher) 使测试变得容易理解。清单                9 给出了 PCC 使用的这样一个单元测试类。在这个单元测试中,在一个数据存储中填充了运动员信息,并解析一个 XML                文件,将其内容放在对象中。接下来,系统将通过测试来确定能否在 XML 文件和数据存储中的内容之间完成交叉查找。
清单                9.单元测试示例
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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;

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
        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"));

        }

        @Override
        protected Optional<IDataSet> getDataSet() throws DataSetException {
                return Optional.of((IDataSet)new FlatXmlDataSetBuilder().build(Resources.getResource("players.xml")));
        }
}




单单一个原子测试就非常复杂。通过检查代码段,可以深入了解 PCC                所使用的测试方法。包名称和导入语句是在测试文件的开头处定义的。包名称很重要,应映射您测试的类包。这使得包、私有方法或默认方法可在必要时用于测试。导入语句定义了测试该功能所需的所有类,它们本身被                Java 命名空间分解为不同部分。为了使测试更容易理解,我们使用了 Hamcrest 静态导入。使用了 Dbunit                导入来帮助执行持久性测试。使用了 google.common 库在 Java 中实现函数编程。com.ibm                类是所测试的类,其中包含一些测试帮助器类。
返回列表