Как создать JUnit абстрактного тестового класса с заводскими методами

#java #junit #abstract

#java #junit #аннотация

Вопрос:

Извините, что задал, казалось бы, уже заданный вопрос, но я не смог найти ответ. Извините, если на этот точный случай уже был дан ответ. Если да, пожалуйста, укажите мне на поток.

     public abstract class AbstractBuilderTest {
    
        protected OutputBuilder builder;
    
        protected abstract OutputBuilder createBuilder(String rootName);
    
        @Test(expected = NullPointerException.class)
        public void testAddAboveRoot() {
            String invalidResult
                    = "<orders>"
                      "<order>"
                      "</order>"
                      "</orders>"
                      "<customer>"
                      "</customer>";
            builder = createBuilder("orders");
            builder.addBelow("order");
            try {
                builder.addAbove("customer");
                fail("expecting java.lang.RuntimeException");
            } catch (RuntimeException ignored) {
            }
        }
        
    }

public class DOMBuilderTest extends AbstractBuilderTest {
    
    @Override
    protected OutputBuilder createBuilder(String rootName) {
        return new DOMBuilder(rootName);
    }
}

public class XMLBuilderTest extends AbstractBuilderTest {

    @Override
    protected OutputBuilder createBuilder(String rootName) {
        return new XMLBuilder(rootName);
    }

}
  

С JUnit3, где вы расширяете TestCase, это может выполняться, однако с JUnit 4 он выдает:

 java.lang.InstantiationException
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  

Комментарии:

1. Скорее всего, вы прикрепляете к своим классам некоторые аннотации JUnit, которые вы нам не показали. Знаете, это очень важно.

2. импортируйте статический org.junit. Assert.fail; импортируйте org.junit. Тест;

3. Аннотации — это те вещи, которые начинаются с «@».

4. Да. @Test —> import org.junit.Test ; Я думаю, вы знаете, что @Override это значит. Это все.

5. Итак, вы говорите мне, что на нем нет аннотаций class AbstractBuilderTest ?