0

我知道建议在测试中使用“单个断言”或在 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.yieldFetch();

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

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

4

0 回答 0