2013-05-28 22 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是propper方式來測試GreenForm和覆蓋方法?例如:

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

可以使用的TestCase的setUp()方法爲。

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

沒錯,但是有'protected'領域是不好的做法。我提出了一個與此非常相似但使用我通常採用的表單的建議。 –