java - 来自抽象类的父类(super class)的模拟字段

标签 java inheritance tdd mockito

我有一个抽象类:

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/

相关文章:

java - 如何快速将Maven依赖替换为Eclipse项目?

java - SpringBoot使用@RequestBody注释将整数原子转换为 boolean 值?如何拒绝将整数转换为 boolean 值?

c# - VS2010有没有C#.NET的并发调试工具

java - Fitnesse 的代码覆盖率

java - Selenium Webdriver 代码在类下查找 <li>

java - 生成空输出文件的 Map Reduce 作业

php - PHP 中几乎最终的方法?

java - 如何向下转换 Java 对象?

java - 使用Java继承,当我在父类(super class)中时如何引用特定的子类

angularjs - 如何在 AngularJS 应用程序中模拟/ stub activate() 方法