### Question:
StreamLookupStepAnalyzer extends StepAnalyzer<StreamLookupMeta> { @Override protected void customAnalyze( StreamLookupMeta meta, IMetaverseNode rootNode ) throws MetaverseAnalyzerException { keyLookups = meta.getKeylookup(); keyStreams = meta.getKeystream(); values = meta.getValue(); valueNames = meta.getValueName(); lookupStep = meta.getStepIOMeta().getInfoStreams().get( 0 ).getStepname(); String[] prevStepNames = parentTransMeta.getPrevStepNames( getStepName() ); for ( int i = 0; i < keyLookups.length; i++ ) { IMetaverseNode keyNode = getInputs().findNode( prevStepNames[0], keyStreams[i] ); IMetaverseNode keyLookupNode = getInputs().findNode( lookupStep, keyLookups[i] ); metaverseBuilder.addLink( keyLookupNode, DictionaryConst.LINK_JOINS, keyNode ); metaverseBuilder.addLink( keyNode, DictionaryConst.LINK_JOINS, keyLookupNode ); } }  @Override Set<Class<? extends BaseStepMeta>> getSupportedSteps(); @Override Map<String, RowMetaInterface> getInputFields( StreamLookupMeta meta ); @Override Set<ComponentDerivationRecord> getChangeRecords( StreamLookupMeta meta );  }### Answer:
@Test public void testCustomAnalyze() throws Exception { analyzer.customAnalyze( streamLookupMeta, node ); verify( builder, times( 2 * mockKeylookup.length ) ).addLink( any( IMetaverseNode.class ), eq( DictionaryConst.LINK_JOINS ), any( IMetaverseNode.class ) ); }