可以使用 mockito 模拟抽象 class 吗?
Can an abstract class be mocked using mockito?
在测试中的 class 中,如果它的构造函数接受一个抽象的 class 参数,我们可以使用 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 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);
}
}
在测试中的 class 中,如果它的构造函数接受一个抽象的 class 参数,我们可以使用 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 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);
}
}