Hadoop 在MR单元中模拟上下文对象

Hadoop 在MR单元中模拟上下文对象,hadoop,hbase,mrunit,Hadoop,Hbase,Mrunit,我是Hadoop新手,这是我的第一个mapper程序,我正在通过MR单元进行单元测试 我正在通过config对象传递我设置的参数(year) Configuration config =new Configuration() config.set("Year", "2012"); Job job=new Job(config ,"Yearly"); 我的地图绘制者: public void map(ImmutableBytesWritable ro

我是Hadoop新手,这是我的第一个mapper程序,我正在通过MR单元进行单元测试

我正在通过config对象传递我设置的参数(year)

    Configuration config =new Configuration()           
    config.set("Year", "2012");
    Job job=new Job(config ,"Yearly");
我的地图绘制者:

public void map(ImmutableBytesWritable row, Result values, Context context)throws IOException, InterruptedException 
{   
  Configuration conf = context.getConfiguration();
  String Year= conf.get("Year");
}
在MR单元测试中,我模拟了上下文类以及键value

@Test
public void testMapper() throws IOException, InterruptedException
{
  context = mock(Mapper.Context.class);

  Configuration conf=mock(Configuration.class);
  when(conf.get("Year")).thenReturn("2012");
  when(context.getConfiguration()).thenReturn(conf);
  mapper.map(row, result, context);
}

但是,无法获取映射中的值(年),接收空值。我这样做是否正确,或者是否有更好的方法来测试映射

您应该在测试代码中从mapdriver获取配置,如下所示:

Configuration conf = mapdriver.getConfiguration();
conf.set("Year","2013");

您为什么不使用MRUnit的
MapperDriver
来测试这个问题?我使用了MRUnit的MapDriver,因此不需要模拟配置对象,我们可以使用MapDriver.setConfiguration(conf)设置conf。但是,我需要模拟键和值,并作为mapDriver运行测试;谢谢。你的评论快结束的时候我就不知道了-你能把你的问题更新到你现在的问题吗,并列出仍然给你带来问题的原因-谢谢