blob: 1b5fd04b4e15b1f249d875fbff5a1e60da6e3a29 [file]
/*
* Copyright 2015-2022 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v2.0 which
* accompanies this distribution and is available at
*
* https://www.eclipse.org/legal/epl-v20.html
*/
package org.junit.jupiter.engine;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.platform.testkit.engine.EngineExecutionResults;
import org.junit.platform.testkit.engine.Events;
/**
* Integration tests that very proper handling of invalid configuration for
* lifecycle methods in conjunction with the {@link JupiterTestEngine}.
*
* <p>In general, configuration errors should not be thrown until the
* execution phase, thereby giving all containers a chance to execute.
*
* @since 5.0
*/
class InvalidLifecycleMethodConfigurationTests extends AbstractJupiterTestEngineTests {
@Test
void executeValidTestCaseAlongsideTestCaseWithInvalidBeforeAllDeclaration() {
assertExecutionResults(TestCaseWithInvalidBeforeAllMethod.class);
}
@Test
void executeValidTestCaseAlongsideTestCaseWithInvalidAfterAllDeclaration() {
assertExecutionResults(TestCaseWithInvalidAfterAllMethod.class);
}
@Test
void executeValidTestCaseAlongsideTestCaseWithInvalidBeforeEachDeclaration() {
assertExecutionResults(TestCaseWithInvalidBeforeEachMethod.class);
}
@Test
void executeValidTestCaseAlongsideTestCaseWithInvalidAfterEachDeclaration() {
assertExecutionResults(TestCaseWithInvalidAfterEachMethod.class);
}
private void assertExecutionResults(Class<?> invalidTestClass) {
EngineExecutionResults executionResults = executeTests(selectClass(TestCase.class),
selectClass(invalidTestClass));
Events containers = executionResults.containerEvents();
Events tests = executionResults.testEvents();
// @formatter:off
assertAll(
() -> assertEquals(3, containers.started().count(), "# containers started"),
() -> assertEquals(1, tests.started().count(), "# tests started"),
() -> assertEquals(1, tests.succeeded().count(), "# tests succeeded"),
() -> assertEquals(0, tests.failed().count(), "# tests failed"),
() -> assertEquals(3, containers.finished().count(), "# containers finished"),
() -> assertEquals(1, containers.failed().count(), "# containers failed")
);
// @formatter:on
}
// -------------------------------------------------------------------------
static class TestCase {
@Test
void test() {
}
}
static class TestCaseWithInvalidBeforeAllMethod {
// must be static
@BeforeAll
void beforeAll() {
}
@Test
void test() {
}
}
static class TestCaseWithInvalidAfterAllMethod {
// must be static
@AfterAll
void afterAll() {
}
@Test
void test() {
}
}
static class TestCaseWithInvalidBeforeEachMethod {
// must NOT be static
@BeforeEach
static void beforeEach() {
}
@Test
void test() {
}
}
static class TestCaseWithInvalidAfterEachMethod {
// must NOT be static
@AfterEach
static void afterEach() {
}
@Test
void test() {
}
}
}