Наследование теста JUnit не работает

public abstract class GenericTests<T extends Number> {
  protected abstract T getT();      

  @Test public void test1() {
    getT();
  }
}

public class ConcreteTests1 extends GenericTests<Integer> { ... }
public class ConcreteTests2 extends GenericTests<Double> { ... }

Никакие тесты не выполняются вообще, оба конкретных класса игнорируются. Как мне заставить работать? (Я ожидаю, что test1() будет выполняться как для Integer, так и для Double).

Я использую JUnit 4.8.1.

Обновление: оказалось, что проблема связана с maven-surefire-plugin, а не с JUnit. См. Мой ответ ниже.

Ответ 1

Переименовал все мои классы в суффикс "Тест", и теперь он работает (Concrete1Test, Concrete2Test).

Обновление

Это связано с настройками по умолчанию для maven-surefire-plugin.

http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html

По умолчанию плагин Surefire автоматически включает все тестовые классы со следующими шаблонами подстановок:

**/Test*.java - включает все его подкаталоги и все имена файлов java, начинающиеся с "Test". **/*Test.java - включает все его подкаталоги и все имена файлов java, заканчивающиеся на "Test". **/*TestCase.java - включает все его подкаталоги и все имена файлов java, которые заканчиваются на "TestCase".

Ответ 2

Я тестировал это в Eclipse, используя ваш код скелета, и он работал нормально:

Базовый класс:

package stkoverflow;

import org.junit.Test;

public abstract class GenericTests<T> {
    protected abstract T getT();

    @Test
    public void test1() {
        getT();
    }    
}

Подкласс:

package stkoverflow;

public class ConcreteTests1 extends GenericTests<Integer> {

    @Override
    protected Integer getT() {
        return null;
    }    
}

Запуск ConcreteTests1 в Eclipse Junit Runner отлично работал. Возможно, проблема связана с Maven?