【发布时间】:2016-12-05 12:35:23
【问题描述】:
我正在尝试对扩展抽象基 class 的类进行单元测试。
以下是用于说明目的的“相似类”:
public abstract class MyAbstractBaseClass {
@Autowired
private WaterFilter waterFilter;
protected List<String> filterComponents(List<String> allComponents) {
return waterFilter.filter(allComponents);
}
}
public class MyDerivedClass extends MyAbstractBaseClass {
public List<String> filterWater(List<String> allWaterComponents) {
List<String> filteredComponents = this.filterComponents(allWaterComponents); //calls abstract class's filterComponets()
filteredComponents.add("something-else");
return filteredComponents;
}
}
这是我正在尝试的单元测试:
@RunWith(EasyMockRunner.class)
public class MyDerivedClassTest {
@TestSubject
private MyDerivedClassTest SUT;
@Before
public void setup() {
SUT = new MyDerivedClassTest();
}
@Test
public void test filterWater_HappyCase() {
//I want to mock my abstract class's filterComponents() method
//I am trying this:
EasyMock.expect(SUT.filterComponents(getDummyComponents())).andReturn(getSomeComponents());
//What to replay here?
//EasyMock.replay(...)
List<String> actualResult = SUT.filterWater(getDummyComponents());
//assert something
//What to verify?
//EasyMock.verify(...)
}
}
当我运行这个测试时,我得到了
java.lang.NullPointerException
在MyAbstractBaseClass.filter(allComponents)
我了解自动连线的“waterFilter”没有被初始化。但是,我只想在我的单元测试中模拟抽象class 的“非抽象”方法。
我应该如何使用 EasyMock 来解决这个问题?另外,我不知道replay() 和verify() 是什么。
【问题讨论】:
标签: java unit-testing mocking abstract-class easymock