JUnit тест наследования не работает - PullRequest
11 голосов
/ 10 января 2012
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-, а не с самим JUnit. Смотрите мой ответ ниже.

Ответы [ 2 ]

13 голосов
/ 10 января 2012

Переименовал все мои классы, добавив суффикс «Тест», и теперь он работает (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».

0 голосов
/ 10 января 2012

Я протестировал это в 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?

...