Как я уже отмечал в своем комментарии, то, что, вероятно, замедляет вас, состоит в том, что вы последовательно проверяете каждую строку из sys.stdin
для членства в вашем «главном» наборе. Это будет действительно, очень медленно и не позволит вам использовать скорость заданных операций. В качестве примера:
#!/usr/bin/env python
import random
# create two million-element sets of random numbers
a = set(random.sample(xrange(10000000),1000000))
b = set(random.sample(xrange(10000000),1000000))
# a intersection b
c = a & b
# a difference c
d = list(a - c)
print "set d is all remaining elements in a not common to a intersection b"
print "length of d is %s" % len(d)
Вышеуказанное работает в ~ 6 секундах секунд на моей пятилетней машине, и оно тестирует членство в больших наборах, чем вам нужно (если только я не понял вас). Большая часть этого времени фактически занята созданием наборов, поэтому у вас даже не будет этих накладных расходов. Тот факт, что строки, на которые вы ссылаетесь, длинны, здесь не уместен; создание набора создает хэш-таблицу, как объясняет agf. Я подозреваю (хотя, опять же, непонятно из вашего вопроса), что если вы можете получить все свои входные данные в набор до , вы проводите любое тестирование членства, это будет намного быстрее, в отличие от считывая его по одному элементу за раз, , затем проверяет наличие набора
Когда дело доходит до модульных тестов , я бы сосредоточился на тестировании каждого метода фильтрации отдельно. Например, если visitBinaryOperator
возвращает ожидаемое значение на основе ввода и т. Д.
Я не эксперт по именованию вещей, но я бы назвал ваш тест интеграционным тестом . Здесь я бы сосредоточился на тестировании FilterOption
, подготовленном внутри теста. В исходном приложении Apache Olingo создаст это FilterOption
, и эта часть (должна быть) протестирована в Olingo.
Когда я работал с Apache Olingo, я часто ссылался на его репозиторий , особенно на server-test и server-tecsvc . Чтобы проверить, как все проверено в самом Олинго.
Я бы посоветовал взглянуть на FilterValidator , так как он может быть полезен для вашего интеграционного теста.