如何测试具有相同行为但实现细节不同的两个Java具体子类?

时间:2018-03-02 18:57:42

标签: java unit-testing junit mockito abstract-class

我在考虑代码重用:

假设我们有这样的课程:

 public abstract class AbstractMap {
    public abstract void put(K k, V v);
    public abstract V get(K k);
 }

 public class ConcreteMapA extends AbstractMap {
    @Override
    public void put(K k, V v) {
       // put implementation detail A
       ...
    }
    @Override
    public V get(K k) {
       // get implementation detail A
       ...
    }
 }

 public class ConcreteMapB extends AbstractMap {
    @Override
    public void put(K k, V v) {
       // put implementation detail B
       ...
    }
    @Override
    public V get(K k) {
       // get implementation detail B
       ...
    }
 }

这两张地图实现了相同的功能,但具有不同的实现细节。我想为这两个具体的类写单元测试。但随后测试用例开始重复。

 public class ConcreteMapATest {
    @Test
    public void testPutCase1 {          
       ...
    }
    @Test
    public void testPutCase2 {          
       ...
    }
    @Test
    public void testGetCase1 {         
       ...
    }
    ...
 }

 // following starts to be duplicate code
 public class ConcreteMapBTest {
    @Test
    public void testPutCase1 {          
       ...
    }
    @Test
    public void testPutCase2 {          
       ...
    }
    @Test
    public void testGetCase1 {         
       ...
    }
    ...
 }

那么测试这种方法的正确方法是什么?如何重用这些testMethods?或者我可能不应该重复使用单元测试?

谢谢!

0 个答案:

没有答案