我得到以下mrunit错误:
错误mrunit.testdriver:收到意外输出(60,mrdp。mycustomclass@73207f36)
错误mrunit.testdriver:缺少预期输出(60,mrdp。mycustomclass@6f73cf45)位置0处
我创造了一个 MyCustomClass
哪个实现了 Writable
,并具有4个int属性。这是我的Map器的输出值。
以下是mapper的mrunit测试代码:
@Test
public void testMapper() throws IOException {
MyCustomClass result = new MyCustomClass();
result.setAttr1(1);
result.setAttr2(0);
result.setAttr3(0);
result.setAttr4(0);
mapDriver.withInput(new LongWritable(1), new Text("60,5596,1,256"));
mapDriver.addOutput(new Text("60"), result);
mapDriver.runTest();
}
我的制图员应该叫它的设定者 setAttr1(1)
,将“1”定位到 new Text("60,5596,1,256")
在上面。
如何使用自定义类(具有多个属性)测试此结果?作业执行成功了,我只是不知道如何让mrunit测试工作。
$ hadoop fs -cat patterns/minmaxcount/outuserprefs/part*
23 mrdp.MyCustomClass@4cf15f6c
60 mrdp.MyCustomClass@4cf15f6c
1条答案
按热度按时间bvn4nwqk1#
你需要重写
equals()
以及hascode()
对于自定义类,如果要测试是否相等。如果你不这样做,就没有办法测试“语义平等”。默认值Object
将使用方法。这就是你要面对的。有关进一步的讨论,请参阅为什么需要重写java中的equals和hashcode方法?下面是一个使用自定义类的简单junit测试
CustomClass
. 我把那本书注解掉了equals
以及hashcode
. 如果您运行测试,它将失败,并显示与您接收到的消息类似的消息。如果删除注解并运行它,它将通过。如果您没有实现这些方法的经验或知识,大多数ide都可以选择为您创建它们。
eclipse:右键单击class->source->generatequals和hashcode
netbeans:右击source editor->insert code->equals()hashcode()
在这两种情况下,都需要选择要在equals和hashcode中包含(检查)的属性。这是我使用的仅有的两个IDE:-)