Chr*_*ney 51 java junit unit-testing junit4 junit-runner
我有一个接口,List其实现包括单链接列表,双重,循环等.我为Singly编写的单元测试应该对大多数双重以及循环和接口的任何其他新实现都有好处.因此,JUnit不是为每个实现重复单元测试,而是提供内置的东西,让我有一个JUnit测试并针对不同的实现运行它?
使用JUnit参数化测试我可以提供不同的实现,如Singly,doublely,circular等,但是对于每个实现,相同的对象用于执行类中的所有测试.
gus*_*afc 53
我可能会避免使用JUnit的参数化测试(IMHO非常笨拙地实现),只需创建一个List可以通过测试实现继承的抽象测试类:
public abstract class ListTestBase<T extends List> {
private T instance;
protected abstract T createInstance();
@Before
public void setUp() {
instance = createInstance();
}
@Test
public void testOneThing(){ /* ... */ }
@Test
public void testAnotherThing(){ /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)
然后,不同的实现获得自己的具体类:
class SinglyLinkedListTest extends ListTestBase<SinglyLinkedList> {
@Override
protected SinglyLinkedList createInstance(){
return new SinglyLinkedList();
}
}
class DoublyLinkedListTest extends ListTestBase<DoublyLinkedList> {
@Override
protected DoublyLinkedList createInstance(){
return new DoublyLinkedList();
}
}
Run Code Online (Sandbox Code Playgroud)
这样做的好处(而不是制作一个测试所有实现的测试类)是,如果有一些特定的极端情况,你想用一个实现测试,你可以只添加更多的测试到特定的测试子类.
das*_*ght 35
使用JUnit 4.0+,您可以使用参数化测试:
@RunWith(value = Parameterized.class)在测试夹具中添加注释public static方法返回Collection,带有注释它@Parameters,并把SinglyLinkedList.class,DoublyLinkedList.class,CircularList.class等进入该集合Class:public MyListTest(Class cl),并将其存储Class在实例变量中listClasssetUp方法或@Before,使用List testList = (List)listClass.newInstance();通过上述设置,参数化运行器将为MyListTest您在@Parameters方法中提供的每个子类创建测试夹具的新实例,从而为您需要测试的每个子类执行相同的测试逻辑.
| 归档时间: |
|
| 查看次数: |
16827 次 |
| 最近记录: |