我知道建议在测试中使用“单个断言”或在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();
模拟获取的完成
您认为整体结构是编写此类测试的好方法吗?
还有哪些其他/更好的方法?