使用Mockito可以模拟抽象类吗?

3

如果一个待测试类的构造函数接收一个抽象类参数,我们能否使用mockito进行模拟?

例如:

public abstract AbstractClass{
} 

//Class under test
public class SourceClass{            
  SourceClass(AbstractClass abstractClass){}            
}

@RunWith(MockitoJUnitRunner.class
public SourceClassTest{
 @Mock
  AbstractClass abstractClass;
}

每当我这样做时,就会出现这个错误。
java.lang.ExceptionInInitializerError

我使用的Mockito版本是1.8.5。

可能是重复的问题:使用Mockito测试抽象类 - Mureinik
2个回答

3

好的,下面的代码运行良好,如果需要我添加一些注释来解释我写的内容,请告诉我,好吗?(嘿,我正在使用Mockito 1.10.8):

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

abstract class AbstractClassToTest {
    public abstract String doSomething();
}

class ConcreteClass {

    private String something;

    public ConcreteClass(AbstractClassToTest aClass){
        this.something = aClass.doSomething();
    }

    public String getSomething(){
        return this.something;
    }
}

@RunWith(MockitoJUnitRunner.class)
public class TempTest {

    @Mock
    private AbstractClassToTest myClass;

    @Test
    public void canAbstractClassToTestBeMocked() {
        String expectedResult = "hello world!";
        Mockito
            .when(myClass.doSomething())
            .thenReturn(expectedResult);

        String actualResult = myClass.doSomething();

        Assert.assertEquals(expectedResult, actualResult);
    }

    @Test
    public void canConcreteClassBeInstantiatedWithMock() {
        String expectedResult = "hello world!";
        Mockito
            .when(myClass.doSomething())
            .thenReturn(expectedResult);

        ConcreteClass concrete = new ConcreteClass(myClass);

        String actualResult = concrete.getSomething();

        Assert.assertEquals(expectedResult, actualResult);
    }
}

如果您要对此进行负评,能否至少解释一下原因?它是否没有清晰地回答了所问的问题? - germanio

0

你不能模拟抽象类,你必须模拟一个具体的类并将其传递。就像常规代码无法实例化抽象类一样。


嗯...你应该把这个作为答案添加 :) - Cristik
那也可以(或许甚至比添加答案更好) :) - Cristik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接