【发布时间】:2014-11-07 13:41:59
【问题描述】:
我的 JUnit 测试用例遇到了一个奇怪的问题:@After 方法首先由 JUnit 调用。
这是我用于测试的抽象类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = { TestServicePlusRepositoryIntegrationConfiguration.class })
@ActiveProfiles(Profiles.TEST)
@Transactional
public abstract class AbstractServicePlusRepositoryIntegrationTest {
}
这是有问题的测试用例:
public class AdvertisementServiceSecurityTest extends AbstractServicePlusRepositoryIntegrationTest {
...
@Before
public void setUp() {
advertisement = advertisementFactory.createAdvertisement(OWNER_OF_ADVERTISEMENT_EMAIL);
impersonator = memberFactory.createMember(IMPERSONATOR_EMAIL, Role.ROLE_BASIC_CHILDCAREWORKER);
when(geolocationServiceMock.retrieveAddressFromReference("valid-reference")).thenReturn(new Address());
}
@After
public void tearDown() {//Executed first!
advertisementFactory.deleteAdvertisement(advertisement);
memberFactory.deleteMember(impersonator);
}
...
@Test(expected = AccessDeniedException.class)
@WithUserDetails(IMPERSONATOR_EMAIL)
public void deleteAdvertisementByIdWithInvalidMember() {
advertisementService.deleteAdvertisement(advertisement.getId());
}
什么可能导致@After 方法首先运行?仅供参考,我不使用 JUnit 3。
这里是测试用例的完整源代码:https://gist.github.com/balteo/e8c2ea96db22d3f9c88e
【问题讨论】:
-
你能解释一下为什么你认为这个方法是在测试用例之前执行的吗?
-
我添加了三个断点:第一个在设置方法中,第二个在拆卸中,第三个在测试方法中。命中的第一个断点是拆解断点...
-
您能否提供一个完整的可运行示例(例如使用 System.out 语句)来演示该行为?
-
@JohnB:我正在这样做。请忍受我一会儿...
-
@JohnB:我整理了一个稍微精简的示例来演示该问题。如何与您分享?
标签: java junit junit4 spring-junit