0
다음 감속 코드가 있으며 테스트를 위해 PowerMock을 사용하려고합니다. package com.cerner.cdh.examples.reducer; 다음은 MapReduce 코드 테스트 용 PowerMockito
public class LinkReversalReducer extends TableReducer<Text, Text, ImmutableBytesWritable> {
@Override
protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
StringBuilder inlinks = new StringBuilder();
for (Text value : values) {
inlinks.append(value.toString());
inlinks.append(" ");
}
byte[] docIdBytes = Bytes.toBytes(key.toString());
Put put = new Put(docIdBytes);
put.add(WikiConstants.COLUMN_FAMILY_BYTES, WikiConstants.INLINKS_COLUMN_QUALIFIER_BYTES,
Bytes.toBytes(inlinks.toString().trim()));
context.write(new ImmutableBytesWritable(docIdBytes), put);
}
}
내가 위를 위해 작성 한 테스트입니다 :
@Test
public void testLinkReversalReducer() throws IOException, InterruptedException {
Text key = new Text("key");
@SuppressWarnings("rawtypes")
Context context = PowerMockito.mock(Context.class);
Iterable<Text> values = generateText();
StringBuilder inlinks = new StringBuilder();
for (Text value : values) {
inlinks.append(value);
inlinks.append(" ");
}
LinkReversalReducer reducer = new LinkReversalReducer();
byte[] docIdBytes = Bytes.toBytes(key.toString());
byte[] argument1 = WikiConstants.COLUMN_FAMILY_BYTES;
byte[] argument2 = WikiConstants.INLINKS_COLUMN_QUALIFIER_BYTES;
byte[] argument3 = Bytes.toBytes(inlinks.toString().trim());
Put put = new Put(docIdBytes);
put.add(argument1, argument2, argument3);
reducer.reduce(key, values, context);
Mockito.verify(context).write(new ImmutableBytesWritable(docIdBytes), put);
}
private List<Text> generateText() {
Text value = new Text("AB");
List<Text> texts = new ArrayList<Text>();
texts.add(value);
return texts;
}
}
그래서 일이 내 Mockito.verify (문맥)에 .write (새 ImmutableBytesWritable (docIdBytes)을 넣어)이다; 올바른 값으로 호출되는 것 같고 내 junit 결과는 Invoked 및 Actual이 동일한 응답을 제공함을 보여줍니다. 그러나 시험은 여전히 실패로 보인다. 누구는 단서가 있습니까? . 어떤 도움을 주시면 감사하겠습니다 :)
하면 실패 메시지 나 스택 트레이스를 제공 할 수 있습니다 :
는 다음 당신이 할 수있는이 문제를 해결하려면? –