использование CoGbkResult с PAssert.containsInAnyOrder () - PullRequest
1 голос
/ 13 апреля 2020

Я пытаюсь покрыть тестами Apache Функция луча, которая возвращает принимает и возвращает KV:

public class ChangeKeyFn extends DoFn<KV<String, CoGbkResult>, KV<String, CoGbkResult>> {

     @ProcessElement
    public void processElement(@Element KV<String, CoGbkResult> element, OutputReceiver<KV<String, CoGbkResult>> receiver) {
       ...
     }
}

  PAssert.that(output).containsInAnyOrder(...)

Но всегда с ошибкой утверждения. Однако я уверен, что эта функция работает правильно.

Caused by: java.lang.AssertionError: 
Expected: iterable over [<KV{val1, [[{col2=val2, col1=val1}], [{colB=valB, colA=valA}]]}>] in any order
     but: Not matched: <KV{val1, [[{col2=val2, col1=val1}], [{colB=valB, colA=valA}]]}>

Скорее всего root причина того, что CoGbkResult не переопределяет метод равных:

CoGbkResult gbkRes = CoGbkResult.of(new TupleTag<String>("tuple1"), Collections.singletonList( "string1" ));

CoGbkResult gbkRes2 = CoGbkResult.of(new TupleTag<String>("tuple1"), Collections.singletonList( "string1" ));

assertTrue(gbkRes.equals(gbkRes2));

Есть ли причина для CoGbkResult не переопределять метод равных? Как использовать CoGbkResult с PAssert.containsInAnyOrder?

1 Ответ

0 голосов
/ 15 апреля 2020

Мне удалось выполнить необходимые утверждения через вызов функции

PAssert.that(output).satisfies(new SatisfyFunction());

SatisfyFunction получает всю коллекцию внутри повторяемого ввода:

    public static final class SatisfyFunction1 implements SerializableFunction<Iterable<KV<String,CoGbkResult>>,Void> {

        @Override
        public Void apply(Iterable<KV<String, CoGbkResult>> inputs) {
            int counter = 0;
            HashSet<String> keys =  new HashSet<String>();
            for(KV<String, CoGbkResult> input : inputs) {
                counter++;
                keys.add(input.getKey());
            }
            assertEquals(3, counter);
            assertEquals(new HashSet<String>(Arrays.asList("U1", "U2", "U3")), keys);
            return null;
        }

    }
...