2013-05-28 4 views
1

У меня есть класс и тест FormTest который проверяет FormJunit продлить тестовый пример, чтобы проверить ребенка

public class Form { 
    public doSomething() {} 
} 

public class GreenForm extends Form { 
    @Override 
    public doSomething() {} 
} 

public class YellowForm extends Form { 
} 

public class FormTest { 
    Form form = new Form(); 

    @Test 
    public void doSomethingTest() { getForm().doSomething() } 

    public Form getForm() { return form; } 
} 

расширяет FormTest это Проппер способ проверить GreenForm и переопределен метод? Ex:

public class GreenFormTest extends FormTest { 
    Form form = new GreenForm(); 

    @Override 
    public Form getForm() { return form; } 
} 
+1

У вас, похоже, есть проблемы с синтаксисом наследования. «GreenForm» переопределяет метод формы без его расширения, а «GreenFormTest» не имеет имени своего родительского класса. –

+0

@ DanielLerps спасибо за указание, я надеюсь, что эти небольшие синтаксические ошибки не смутили вас в моем вопросе –

ответ

0

Я согласен с вашим представлением о том, как проверить это и делать это регулярно. Образец, который я следую, следующий:

public class FormTest{ 
    private Form form; 

    @Before 
    public void setup(){ 
     // any other needed setup 
     form = getForm(); 
     // any other needed setup 
    } 

    protected Form getForm(){ 
     return new Form(); 
    } 

    @Test 
    // do tests of Form class 
} 

public class GreenTest{ 
    private GreenForm form; 

    @Before 
    public void setup(){ 
     form = getForm(); 
     // any other needed setup 
     super.setup(); 
     // any other needed setup 
    } 

    @Override 
    protected Form getForm(){ 
     return new GreenForm(); 
    } 

    @Test 
    // do tests of how GreenForm is different from Form 
    // you might also need to override specific tests if behavior of the method 
    // under test is different 
} 
0

Вы можете использовать метод setUp() из TestCase для этого.

public class Form 
{ 
    public void doSomething(){} 
} 

public class GreenForm extends Form 
{ 
    @Override 
    public void doSomething(){} 
} 

С испытаний:

public class FormTest extends TestCase 
{ 
    protected Form f; 

    @Before 
    public void setUp() 
    { 
     f = new Form(); 
    } 

    @Test 
    public void testForm() 
    { 
     // do something with f 
    } 
} 

public class GreenFormTest extends FormTest 
{ 
    @Before 
    @Override 
    public void setUp() 
    { 
     f = new GreenForm(); 
    } 
} 
+0

Этот метод исключает возможность 'FormTest' делать что-либо в' @ Before' –

+0

Вы можете вызвать 'super.setUp() ', чтобы выполнить все, что вы хотите, чтобы FormTest'. Вы просто указываете какие-либо изменения в 'setUp()' дочернего класса после супервызов. –

+0

Правда, однако наличие защищенных полей - плохая практика. Я сделал предложение, что это очень похоже на это, но с использованием формы, которую я обычно беру. –

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