Eclipse使用jUnit4对MapReduce程序进行单元测试

Eclipse使用jUnit4对MapReduce程序进行单元测试

在项目下创建test目录,存放所有的单元测试代码

技巧:test目录下的包结构尽量和src下的包结构一致,便于代码的维护和可读性

将test目录添加到项目中的Java Build Path Sourc中

Eclipse使用jUnit4对MapReduce程序进行单元测试_第1张图片

创建JUnit Test Case

Eclipse使用jUnit4对MapReduce程序进行单元测试_第2张图片

基本设置

单元测试文件的名称以Test结尾
根据需要选择method和Class under test(需要进行单元测试的类)
Eclipse使用jUnit4对MapReduce程序进行单元测试_第3张图片

代码示例

编写map reduce技巧,将map和reduce的具体实现单独放在一个函数中,方便进行单元测试

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;

import org.apache.hadoop.io.Text;
import org.junit.Before;
import org.junit.Test;

public class TestAMRTest {

    private Text value;

    @Before
    public void setUp() throws Exception {
        ...
        value = new Text(logRow);
    }

    @Test
    public void testMap() {

        String sRecord = value.toString();
        ...

        assertEquals(new Text(originKey), sKey);
    }

    @Test
    public void testReduce() throws IOException {
        Vector<Text> valueList = new Vector<Text>();
        Text value;
        String logRow1 = "2016042408|130|1";
        logRow1 = logRow1.replace("|", String.valueOf(GlobalDef.SPLIT_FIELD));
        value = new Text(logRow1);
        valueList.add(value);

        String logRow2 = "2016042408|130|2";
        logRow2 = logRow2.replace("|", String.valueOf(GlobalDef.SPLIT_FIELD));
        value = new Text(logRow2);
        valueList.add(value);

        Text result = value;

        Iterator<Text> values = valueList.iterator();

        HashMap<Integer, LogRecord> m_hashRecord = new HashMap<Integer, LogRecord>();
        // 遍历相同key的日志记录
        while (values.hasNext()) {
            // 获得日志记录
            Text val = values.next();
            String sRecord = val.toString();
            ...
        }
        ...
        assertEquals(record1.getItemnum(),record2.getItemnum());
    }
}

总结一下:

  1. 单元测试非常有必要,可以减少很多已知或未知的bug,特别是在版本变更时。
  2. 代码在编写时就需要考虑到可测试性,代码组织要合理,便于针对性的编写测试用例,一个技巧就是将map和reduce的具体实现单独到一个独立的可测试的函数中。

你可能感兴趣的:(java,eclipse,JUnit)