Junit SuiteClasses со статическим списком классов

Объекты итератора в Python соответствуют протоколу итератора, который в основном означает, что они предоставляют два метода: __iter__() и __next__(). __iter__ возвраты итератор возражает, и неявно назван в начале циклов. __next__() метод возвращает следующее значение и неявно назван в каждом инкременте цикла. __next__() повышения исключение StopIteration, когда больше нет значения для возврата, который неявно получен конструкциями цикличного выполнения, чтобы прекратить выполнять итерации.

Вот простой пример счетчика:

class Counter:
    def __init__(self, low, high):
        self.current = low
        self.high = high

    def __iter__(self):
        return self

    def __next__(self): # Python 2: def next(self)
        if self.current > self.high:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1


for c in Counter(3, 8):
    print c

Это распечатает:

3
4
5
6
7
8

Это легче записать использование генератора, как покрыто в предыдущий ответ:

def counter(low, high):
    current = low
    while current <= high:
        yield current
        current += 1

for c in counter(3, 8):
    print c

печатный вывод будет тем же. Под капотом объект генератора поддерживает протокол итератора и делает что-то примерно подобное классу Счетчик.

статья David Mertz, Итераторы и Простые Генераторы , является довольно хорошим введением.

6
задан Alex 22 October 2015 в 20:08
поделиться

1 ответ

Это не должно работать. Вы должны поместить массив в аннотацию как константу. Даже если вы справитесь с этой проблемой, компилятор ее отклонит. Что вам нужно сделать, так это:

@RunWith(Suite.class)

@Suite.SuiteClasses({MyTest.class, MyOtherTest.class})
public static class TestSuite {
}

Обратите внимание на волнистые скобки.

Я уверен, что вы пытаетесь получить возможность динамически создавать список классов в пакете.

Я отправил запрос к ним, чтобы разрешить это, но пока единственный способ сделать это - создать подкласс класса Suite следующим образом:

public class DynamicSuite extends Suite {

    public DynamicSuite(Class<?> setupClass) throws InitializationError {
       super(setupClass, DynamicSuiteBuilder.suite());
    }
}


@RunWith(DynamicSuite.class)
public class DynamicSuiteBuilder {
   public static Class[] suite() {
         //Generate class array here.
   }
}
21
ответ дан 8 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: