@TestFactory
    List<DynamicTest> testTwoTerms() {
        return Stream.of(Op.AND, Op.OR)
                .map(op -> DynamicTest.dynamicTest(op.getDisplayValue(), () -> {
                    final ExpressionOperator expressionOperator = ExpressionOperator.builder()
                            .op(op)
                            .addTerm(ExpressionTerm.builder()
                                    .field(DB_FIELD_NAME_1)
                                    .condition(ExpressionTerm.Condition.EQUALS)
                                    .value(FIELD_1_VALUE).build())
                            .addTerm(ExpressionTerm.builder()
                                    .field(DB_FIELD_NAME_2)
                                    .condition(ExpressionTerm.Condition.EQUALS)
                                    .value(FIELD_2_VALUE).build())
                            .build();

                    final Condition condition = doTest(expressionOperator);

                    // No way to inspect the conditon tree so have to do contains on toString
                    // No way to check it is an OR either
                    assertThat(condition.toString())
                            .contains(conditionString(DB_FIELD_NAME_1, FIELD_1_VALUE));
                    assertThat(condition.toString())
                            .contains(conditionString(DB_FIELD_NAME_2, FIELD_2_VALUE));
                }))
                .toList();
    }
This ought to behave in a consistent way with ExpressionMatcher
stroom-db-util/src/test/java/stroom/db/util/TestCommonExpressionMapper.java