Как использовать JUnit для тестирования асинхронных процессов

Вы можете использовать display: table(-cell) вместо поплавков. Совместимость IE8 +. Не забудьте активировать table-layout: fixed, чтобы браузеры учитывали установленную вами ширину и не пытались сделать все возможное с содержанием «ячеек». Примечание: этот режим отображения CSS имеет мало общего с таблицами HTML, за исключением последних, конечно, по умолчанию используется тот же алгоритм. Это не таблица макетов HTML.

Вам нужно переместить заголовок за пределы «ряда». Вы не можете обернуть, как вы могли бы с Flexbox или плавает.

    .red, .blue {
      color: white;
    }

    .red {
    background-color: red;
    }

    .blue {
    background-color: blue;

    }

    .row{ 
      overflow: auto;
      display: table;
      width: 100%;
      height: 100%;
      table-layout: fixed;
     }
     
    .row::after {
      content: "";
      clear: both;
      display: table;
    }

    [class^="col-"] {
        /*float: left;*/
        display: table-cell;
        height: 100%;
    }

    .col-3 {
        width: 30%;
    }


    .col-7 {
        width: 70%;
    }
<h1> Example 1</h1> 
<div class="row">
      <div class="col-3 red">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Why do we use it?
</div>
      <div class="col-7 blue">ipsum ipsum</div>
</div>  
    

185
задан Matthias Braun 21 March 2019 в 03:31
поделиться

4 ответа

По моему скромному мнению, это - плохая практика, чтобы иметь модульные тесты, создают или ожидают на потоках, и т.д. Вы хотели бы, чтобы эти тесты работали в доли секунды. Вот почему я хотел бы предложить подход с 2 шагами к тестированию асинхронных процессов.

  1. Тест, что Ваш асинхронный процесс отправлен правильно. Можно дразнить объект, который принимает асинхронные запросы, и удостоверьтесь, что отправленное задание имеет корректные свойства, и т.д.
  2. Тест, что асинхронные обратные вызовы делают правильные вещи. Здесь можно дразнить первоначально отправленное задание и предположить, что оно инициализируется правильно, и проверьте, что обратные вызовы корректны.
46
ответ дан Cem Catikkas 23 November 2019 в 05:52
поделиться

Начните процесс и ожидайте результата с помощью Future .

22
ответ дан Tom Hawtin - tackline 23 November 2019 в 05:52
поделиться

An alternative is to use the CountDownLatch class.

public class DatabaseTest {

    /**
     * Data limit
     */
    private static final int DATA_LIMIT = 5;

    /**
     * Countdown latch
     */
    private CountDownLatch lock = new CountDownLatch(1);

    /**
     * Received data
     */
    private List<Data> receiveddata;

    @Test
    public void testDataRetrieval() throws Exception {
        Database db = new MockDatabaseImpl();
        db.getData(DATA_LIMIT, new DataCallback() {
            @Override
            public void onSuccess(List<Data> data) {
                receiveddata = data;
                lock.countDown();
            }
        });

        lock.await(2000, TimeUnit.MILLISECONDS);

        assertNotNull(receiveddata);
        assertEquals(DATA_LIMIT, receiveddata.size());
    }
}

NOTE you can't just used syncronized with a regular object as a lock, as fast callbacks can release the lock before the lock's wait method is called. See this blog post by Joe Walnes.

EDIT Removed syncronized blocks around CountDownLatch thanks to comments from @jtahlborn and @Ring

180
ответ дан 23 November 2019 в 05:52
поделиться

Вы можете попробовать использовать библиотеку Awaitility. Она позволяет легко тестировать системы, о которых вы говорите.

69
ответ дан 23 November 2019 в 05:52
поделиться
Другие вопросы по тегам:

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