[英]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() 並返回特定值。
就像你模擬一個具體的 class 一樣。 使用測試 class 中屬性旁邊的 @Mock 注釋。
@Mock
private ClassA mockClassA;
然后使用
doReturn("mockname").when(mockClassA).getName()
在這里您可以找到更多詳細信息。
@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聲明它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.