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