Как выполнить JUnit TestSuite с некоторой задержкой между каждым TestCase? - PullRequest
3 голосов
/ 01 февраля 2012

У меня есть два класса тестирования JUnit4, скажем, MyTest1, MyTest2, каждый из которых имеет несколько методов тестирования.На самом деле это Selenium JUnit TestCases.

В MyTest1.someMethodInsertingDate () я вставлю некоторые данные в БД, и обработка займет некоторое время.

В MyTest2.validateProcessedData () мне нужноубедитесь, что обработанные данные, вставленные в первый метод испытаний, действительны или нет.

Я знаю, что связь между методами / случаями испытаний не является хорошей практикой.Но я пишу SeleniumTests для автоматизации действий пользователя в пользовательском интерфейсе, поэтому я должен сделать это.

Я выполняю эти два TestCases, используя MyTestSuite с @RunWith & @ SuiteClasses.

Теперь как я могускажите JUnit выполнить MyTest2 TestCase с некоторой задержкой, скажем, 1 минута.

Ответы [ 5 ]

2 голосов
/ 02 февраля 2012

Я думаю, что вы не получаете ответ (по крайней мере, не тот, который вам нужен) на этот вопрос, потому что обычно считается плохой практикой полагаться на эту механику в тестовом наборе. Ваши тесты станут очень трудно поддерживать, если у вас есть эти типы зависимости друг от друга, и это может (скорее всего, будет) вызвать трудности в их отладке позже.

Вы могли бы абстрагироваться от этого первого теста, а этот второй тест мог бы расширить его. Этот второй тест затем будет использовать общие функции в его настройке (возможно, с другими данными). Это должно позволить вам запускать тесты одновременно, поскольку каждый из них будет атомарным объектом.

1 голос
/ 06 мая 2015

Вы можете использовать простую аннотацию "@Before". Он должен задерживать выполнение потока каждый раз, когда он запускает тест.

Пример:

@Before
public void initialise() throws InterruptedException {
    Thread.sleep(2000);
}
1 голос
/ 08 октября 2012

Поскольку мы все надеемся, что это плохая практика, в общем, есть исключения. Чтобы утверждать очевидное, мы говорим не о модульных тестах, а об интеграционных тестах (JUnit, возможно, не является подходящим инструментом для работы, но я не нашел ничего лучше)

Я также делаю тесты Selenium. Я выполняю интеграционное тестирование на стороннем тестовом сервере, поведение которого является случайным, если я запускаю тесты без sleep ().

Это одно из возможных решений, обратите внимание, что это было проверено только один раз:

public class SleepySuite extends Suite {
    private final Logger log = LoggerFactory.getLogger(SleepySuite.class);
    private final Integer defaultSleepSec = 0;
    private final Integer sleepSec;

    public SleepySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
        super(klass, builder);
        sleepSec = initSleep(klass);
    }

    private Integer initSleep(Class<?> klass) {
        SleepSec ts = klass.getAnnotation(SleepSec.class);
        Integer sleep = defaultSleepSec;
        if (ts != null) {
            sleep = ts.value();
            log.debug("Configured with sleep time: {}s", sleep);
        }
        return sleep;
    }

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    @Inherited
    public @interface SleepSec {
        public int value();
    }

    /**
     * @see org.junit.runners.Suite#runChild(org.junit.runner.Runner, org.junit.runner.notification.RunNotifier)
     */
    @Override
    protected void runChild(Runner runner, RunNotifier notifier) {
        super.runChild(runner, notifier);
        //Simply wrapped Thread.sleep(long)
        TestUtils.sleep(sleepSec);
    }
}

Ваш люкс exmaple:

@RunWith(SleepySuite.class)
@Suite.SuiteClasses({
   Some.class,
   SomeOther.class
})
@SleepySuite.TimeoutSec(30)
public class YourSuite{
}
0 голосов
/ 17 февраля 2012

Вы можете вызвать некоторое ожидание в Java в первом тестовом случае после кода вашей базы данных, например:

long end3 = System.currentTimeMillis () + 6000;

        while(System.currentTimeMillis()<end3)
        {
            // Do nothing here Just time pass.  
        } 

Это гарантирует, что код Java ожидает 6000 мс после кода БД, и этого должно быть достаточно для добавления данных. Вы можете настроить время в соответствии с размером ваших данных.

0 голосов
/ 02 февраля 2012

Вы можете перевести сценарий в режим сна, добавив что-то в конце каждого метода тестирования.
В PHP:

sleep(60);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...