我有一个抽象类:
public abstract MySuperEpicAbstractClass {
@Autowired
private IMessageWriter messageWriter;
protected IMessageWriter getMessageWriter() {
return messageWriter;
}
}
public abstract class MyEpicAbstractClass extends MySuperEpicAbstractClass {
//This class usses the getMessageWriter();
}
我的问题很简单,我有一个测试MyEpicAbstractClassTest
,它将测试子类MyEpicAbstractClass
,那么我如何从父类(super class)中模拟messageWriter?
最佳答案
虽然有很多方法可以做到这一点,但“低技术”、“无框架”和“无重构”版本只是在测试中将其分流。它可能看起来像这样:
public MyEpicAbstractClassTest {
public void testThatNeedsTheFakeMessageWriter() {
ShuntedMyEpicAbstractClass meac = new ShuntedMyEpicAbstractClass();
meac.doSomething("Arguments");
verify(meac.getMessageWriter()).write("Arguments");
}
}
// And the shunt is here
public class ShuntedMyEpicAbstractClass extends MyEpicAbstractClass {
private IMessageWriter stubbedWriter = Mockito.mock(IMessageWriter.class);
public IMessageWriter getMessageWriter() {
return stubbedWriter;
}
}
当您无法像其他海报所建议的那样重构基类时,此技术通常很有用。
希望这有帮助!
布兰登
关于java - 来自抽象类的父类(super class)的模拟字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310386/