我希望类 A 中继承的 getter 返回 MyObject 的 Mock。我怎样才能做到这一点而不直接 stub A 中的 getMyObject() 方法(即通过使用一些 MockBase 类)?
public class Base {
@Autowired
private MyObject obj;
public MyObject getMyObject(){
return obj;
}
}
public class A extends Base {
@Autowired
private SomeObject xyz;
public void myMethod(){
MyObject obj = getMyObject();
//do something here
}
}
public void MockBase {
@Mock
protected MyObject obj;
public MyObject getMyObject(){
return obj;
}
}
public class ATest extends MockBase {
@InjectMocks
private A a;
@Mock
private SomeObject xyz;
@BeforeMethod
public void setUp(){
MockitoAnnotations.initMocks(this);
}
public void MyMethod_SomeCondition_ExpectedResult{
a.myMethod();
}
}
最佳答案
那里有什么问题?它按预期工作,也许您使用的是旧版本的 Mockito。以版本 1.9.5 为例:
这是您要测试的类的父类:
public class Base {
private BaseObjectDependency base_object_dependency;
public BaseObjectDependency getBase_object_dependency() {
return base_object_dependency;
}
}
这是您要测试的类:
public class Child extends Base {
private ChildObjectDependency child_object_dependency;
public void myMethod() {
BaseObjectDependency obj = getBase_object_dependency();
//do something here
}
public ChildObjectDependency getChild_object_dependency() {
return child_object_dependency;
}
}
以下是依赖项:
public class BaseObjectDependency { }
public class ChildObjectDependency { }
现在这是测试的父类:
import org.mockito.Mock;
public class MockBase {
@Mock protected BaseObjectDependency base_test_dependency_mock;
}
最后是测试:
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
public class ChildTest extends MockBase {
@InjectMocks private Child child;
@Mock private ChildObjectDependency child_test_dependency_mock;
@BeforeClass
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void check_that_mocks_are_correctly_injected() {
assertNotNull(child.getBase_object_dependency());
assertEquals(base_test_dependency_mock, child.getBase_object_dependency());
assertNotNull(child.getChild_object_dependency());
assertEquals(child_test_dependency_mock, child.getChild_object_dependency());
}
}
你会发现我没有对 getBase_object_dependency()
进行 stub 。
关于java - 使继承的 getter 返回模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12886452/