【问题标题】:How to run @BeforeClass method before each @Test如何在每个 @Test 之前运行 @BeforeClass 方法
【发布时间】:2018-12-11 14:39:36
【问题描述】:

当我手动运行我的@Tests 时,一切都很好。但是当我一起运行它们时 - 我有一个错误。那么如何在每个@Test 之前运行@BeforeClass。我不能在我的@BeforeClass 中使用@Before 因为我在测试类构造函数方面做了一些工作。

测试类构造函数:

public HttpUtils() {
    this.httpClient = HttpClients.createDefault();
}

课前:

@BeforeClass
public static void init() throws IOException {
    mockStatic(HttpClients.class);
    final CloseableHttpClient closeableHttpClient = createMock(CloseableHttpClient.class);
    when(HttpClients.createDefault()).thenReturn(closeableHttpClient);
}

如果我运行所有测试。在第二次测试中,我得到的 HttpClient 不像模拟,而是像真实的对象,并且最近出现了错误。

【问题讨论】:

  • @BeforeClass 执行一次,通常用于引导一些资源密集型环境,如嵌入式数据库或使用反射 API 的魔力修改类。 @Before 在每次测试之前执行以在测试之间进行一些清理。我不相信在您的情况下,使用这些生命周期组织代码来完成您想要的工作是不可能的。

标签: java unit-testing mocking powermock easymock


【解决方案1】:

使用@Before 而不是@BeforeClass 来执行在每个测试之前

@Before
public static void init() throws IOException {

with @Before 导致该方法在 Test 方法之前运行。超类的@Before 方法将在当前类的方法之前运行。

【讨论】:

【解决方案2】:

如果您想在每个测试类之前执行任何方法,您应该使用 @Before 注释。通过使用 @BeforeClass 注释,您只需在测试类中调用该方法一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2011-10-22
    • 2015-06-26
    相关资源
    最近更新 更多