簡體   English   中英

繼承抽象類的抽象類中的模擬方法

[英]Mock method in abstract class that inherit abstract class

我的 spring-boot 項目中有一個擴展抽象類的服務

public class TestService extends AbstractTest1Service {
// some methods
}

public abstract class AbstractTest1Service extends AbstractTest2Service {

    public String doSomething() {
        return writeText();
    }
}


public abstract class AbstractTest2Service {

    String writeText() {
        return "text";
    }
}

當我想測試TestService時,有什么方法可以模擬writeText()方法:

您的TestService類:

public class TestService extends AbstractTest1Service {
    AbstractTest2Service abstractTest2Service;

    public String doSomething() {
        abstractTest2Service.writeText();
        System.out.println("Passed!");
        return "All Checked";
    }
}

您的TestServiceTest類應該是這樣的:

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class TestServiceTest {
    @InjectMocks
    TestService testService;

    @Mock
    AbstractTest2Service abstractTest2Service;

    @Test
    public void testService(){
        Assert.assertEquals("All Checked",testService.doSomething());
    }
}

注意:不要使用@Spy而不是@Mock ,Spy 將嘗試檢查不存在的抽象類方法的實際實現,因此您的測試將被忽略。 只需使用@Mock

使用@Spy 會報錯:

無法為“ abstractTest2Service ”字段實例化@Spy 您尚未提供用於在字段聲明中進行監視的實例,因此我嘗試構建該實例。 但是,我失敗了,因為:類型 ' AbstractTest2Service是一個抽象類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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