使用Given-When-Then样式测试异步API,多个When-Then?

时间:2017-01-03 23:43:39

标签: java unit-testing asynchronous junit assertj

我知道建议在测试中使用“单个断言”或在BDD范例中使用“When”和“Then”的单个组。

我在考虑在测试异步 API时是否可以放松这个假设。必须首先提出请求,然后完成请求。

这样的事情:

@Rule
public final Java6JUnitSoftAssertions softly = new Java6JUnitSoftAssertions();

@Test
public void setLessStrictCriterionGivenAllFetchesCompleted() {
    givenRepoWithCriterion(new MockCriterion(2));
    givenAllFetchesCompleted();

    // When I set a less strict criterion of ">= 1"
    final MockCriterion criterionMinValue1 = new MockCriterion(1);
    itemRepo.setCriteriaAndFetch(criterionMinValue1);

    // Then there is a fetch request in the queue, to fetch ">= 1"
    assertQueue(criterionMinValue1);
    // And there are loading items
    assertRepoItems(null, null, null);
    assertAll();

    // -------- Notice second group of When-Then starts here --------

    // When the fetch finishes
    fetcher.yieldFetch();

    // Then item list is 1 2 3
    assertRepoItems(1, 2, 3);
}

请注意,有两个组的When-Then。

assertAll()强制断言第一组AssertJ软断言。

提取通常在实际实现中通过HTTP完成,但是,对于测试,有一个模拟的fetcher,并且通过fetcher.yieldFetch();模拟获取的完成

您认为整体结构是编写此类测试的好方法吗?

还有哪些其他/更好的方法?

0 个答案:

没有答案