diff --git a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java index 8fbc9e27ad97..9c382b68df84 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java +++ b/java/execution/impl/src/com/intellij/execution/junit/JUnitUtil.java @@ -376,6 +376,7 @@ public final class JUnitUtil { ProgressManager.checkCanceled(); if (!method.hasModifierProperty(PsiModifier.PRIVATE) && !method.hasModifierProperty(PsiModifier.STATIC) && + !method.hasModifierProperty(PsiModifier.ABSTRACT) && MetaAnnotationUtil.isMetaAnnotated(method, CUSTOM_TESTABLE_ANNOTATION_LIST)) { hasAnnotation = true; break; diff --git a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java index 60d24abee832..f9dc0e1ed785 100644 --- a/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java +++ b/plugins/junit5_rt_tests/test/com/intellij/junit5/JUnit5AcceptanceTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.junit5; import com.intellij.codeInsight.TestFrameworks; @@ -54,6 +54,29 @@ public class JUnit5AcceptanceTest extends JUnit5CodeInsightTest { assertTrue(JUnitUtil.isTestMethod(MethodLocation.elementInClass(innerClass.getMethods()[0], innerClass))); } + @Test + void rejectAbstractMethods() { + PsiClass aClass = myFixture.addClass(""" + import org.junit.jupiter.api.*; + /** @noinspection ALL*/ + abstract class MyTest { + @Test abstract void method(); + } + """); + assertFalse(TestFrameworks.getInstance().isTestClass(aClass)); + assertFalse(TestFrameworks.getInstance().isTestMethod(aClass.getMethods()[0])); + + PsiClass iClass = myFixture.addClass(""" + import org.junit.jupiter.api.*; + /** @noinspection ALL*/ + abstract class InheritedTest extends MyTest { + @Override void method(); + } + """); + assertFalse(TestFrameworks.getInstance().isTestClass(iClass)); + assertFalse(TestFrameworks.getInstance().isTestMethod(iClass.getMethods()[0])); + } + @Test void rejectStaticMethods() { PsiClass aClass =