2015-09-23 11 views
1

Как создать тест JUnit, который проверяет абстрактный код из другого класса? У меня есть абстрактный класс под названием AbstractCurve и «кривая производителя и потребителя», которая расширяет абстрактную кривую. ConsumerCurve и ProducerCurve - это одно и то же, но другое имя класса. Вот код:Как создать тест Junit для абстрактного класса?

public abstract class AbstractCurve { 
    ArrayList <Point> myCurve = new ArrayList <Point>(); 

    public AbstractCurve(int np, double m, double b, int dx) { 
     for (int i = 0; i < np; i++) { 
      int x = i * dx; 
      double y = m * x + b; 
      if (y < 0) throw new IllegalArgumentException(); 
      ArrayList <Point> myCurve = new ArrayList <Point>(); 
      myCurve.add(new Point(x, y)); 
     } 
    } 

    public boolean add(Point p) { 
     myCurve.add(p); 
     sort(); 
     return false; 
    } 

    public void delete(Point p) { 
     myCurve.remove(p); 
    } 

    public abstract void sort(); 

    public String toString() { 
     String t = " "; 
     for (int i = 0; i < myCurve.size(); i++) { 
      t = t + myCurve.get(i).toString() + " "; 
     } 
     return t; 
    } 

    public int contains(Point p) { 
     for (int index = 0; index < myCurve.size(); index++) { 
      myCurve.equals(index); 
     } 
     return -1; 
    } 
} 

Потребитель:

public class ConsumerCurve extends AbstractCurve{ 
    public ConsumerCurve() { 
     super(0, 0, 0, 0); 
    } 
    public void sort() {} 
} 
+4

Вы не проверяете расширяющиеся классы. на ваш случай 'ConsumeCurve'. Кстати, ваш вопрос повторяется: http://stackoverflow.com/questions/7569444/how-to-test-abstract-class-in-java-with-junit –

+0

Итак, я тестирую ConsumerCurve и ProducerCurve? – retrogirl19

+1

@ retrogirl19 Да, вам нужно будет написать JUnit для подклассов. JUnit предназначен для тестирования функционального аспекта модуля и, таким образом, путем тестирования подклассов, которые наследуют поведение от родительского класса abstract, делает цель. –

ответ

-1

Вы не можете создать экземпляр абстрактных классов, так что вы не можете проверить их непосредственно. Хотя тестирование существующих подклассов, вероятно, будет работать, лично я бы создал макетный подкласс только для тестирования, поэтому вы знаете, что ваш подкласс не переопределяет какой-либо конкретный метод, и даже если существующий подкласс не переопределяет конкретный метод сегодня, кто-то может изменить подкласс в будущем таким образом, чтобы тест по-прежнему преуспел, но на самом деле ничего не тестировал.

0

Вы не можете создать объект абстрактного класса, но вы можете создавать объекты конкретных подклассов.

Код, который вы написали в AbstractCurve, наследуется вашими конкретными подклассами ConsumerCurve и ProducerCurve, поэтому вы должны написать свои тесты для этих классов.

Смежные вопросы