如何从抽象 class 模拟继承的受保护方法
How to mock inherited protected method from abstract class
给定一个摘要 class
public abstract class ClassA
{
protected String getName()
{
return "my name"
}
}
public class ClassB extends ClassA{
public String doSomething(){
String name = getName();
return name + " cool ";
}
}
public class TestClass {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test public void testDoSomething() {
ClassB b = new ClassB();
b.doSomething();
}
}
如何在为 classB 的 doSomething 方法编写测试时模拟 getName() 和 return 特定值。
与模拟混凝土的方式相同 class。在测试 class 中的 属性 旁边使用 @Mock 注释。
@Mock
private ClassA mockClassA;
然后使用
doReturn("mockname").when(mockClassA).getName()
here您可以找到更多详细信息。
@Test
public void testcase() {
ClassB classB= spy(ClassB.class);
when(classB.getName()).thenReturn("");
classB.doSomething();
}
@Test
public void testcase() {
ClassB b = mock(ClassB.class);
doReturn("new name").when(b).getName();
}
您可以使用间谍而不是模拟。这样您就可以使用您之前准备的 ClassB 的现有实例:
ClassB classB = PowerMockito.spy(new ClassB());
PowerMockito.when(classB, method(ClassB.class, "getName")).withNoArguments()
.thenReturn("your name");
也可以使用@Spy.
声明
给定一个摘要 class
public abstract class ClassA
{
protected String getName()
{
return "my name"
}
}
public class ClassB extends ClassA{
public String doSomething(){
String name = getName();
return name + " cool ";
}
}
public class TestClass {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test public void testDoSomething() {
ClassB b = new ClassB();
b.doSomething();
}
}
如何在为 classB 的 doSomething 方法编写测试时模拟 getName() 和 return 特定值。
与模拟混凝土的方式相同 class。在测试 class 中的 属性 旁边使用 @Mock 注释。
@Mock
private ClassA mockClassA;
然后使用
doReturn("mockname").when(mockClassA).getName()
here您可以找到更多详细信息。
@Test
public void testcase() {
ClassB classB= spy(ClassB.class);
when(classB.getName()).thenReturn("");
classB.doSomething();
}
@Test
public void testcase() {
ClassB b = mock(ClassB.class);
doReturn("new name").when(b).getName();
}
您可以使用间谍而不是模拟。这样您就可以使用您之前准备的 ClassB 的现有实例:
ClassB classB = PowerMockito.spy(new ClassB());
PowerMockito.when(classB, method(ClassB.class, "getName")).withNoArguments()
.thenReturn("your name");
也可以使用@Spy.
声明