簡體   English   中英

如何從抽象 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() 並返回特定值。

就像你模擬一個具體的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM