簡體   English   中英

Spring 摘要 class 的引導單元測試?

[英]Spring Boot Unit Test for abstract class?

在我的 Spring Boot app 中,我有以下服務和方法:

數據服務:

public abstract class CsvService<T extends CsvBean> {

    public List<T> readFromCsv(Class<T> type, CsvToBeanFilter filter) {

        List<T> data = new ArrayList<>();

        try {
            Resource resource = new ClassPathResource(getFileName());
            
            // code omitted

        } catch (IOException ex) {
            // code omitted
        }
        return data;
    }

    protected abstract String getFileName();
}

機場服務:

@Service
public class AirportService extends CsvService<AirportBean> {

    @Override
    protected String getFileName() {
        return "airport.csv";
    }

    @Override
    protected List<AirportBean> getData(CsvToBean<AirportBean> csvToBean) {

        List<AirportBean> airports = new ArrayList<>();

        // iterate through data
        for (AirportBean bean : csvToBean) {
            
            // code omitted
            airports.add(airport);
        }
        return airports;
    }
}

我正在嘗試為getFileName()getData()方法編寫單元測試,但我不知道如何編寫測試或者我應該特別為getFileName()方法編寫測試。 因為,我無法在需要調用時模擬該服務,並且我的請求傳遞時沒有任何回購協議等。

那么,您將如何為這兩種方法編寫單元測試?

第一個建議是,為從抽象 class 擴展的具體 class 編寫測試用例。

您可以查看此鏈接,了解如何模擬您的類和測試它的方法。

https://howtodoinjava.com/spring-boot2/testing/spring-boot-mockito-junit-example/

它的一個例子:

public class TestEmployeeManager {

    @InjectMocks
    EmployeeManager manager;

    @Mock
    EmployeeDao dao;

    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void getAllEmployeesTest()
    {
        List<EmployeeVO> list = new ArrayList<EmployeeVO>();
        EmployeeVO empOne = new EmployeeVO(1, "John", "John", "howtodoinjava@gmail.com");
        EmployeeVO empTwo = new EmployeeVO(2, "Alex", "kolenchiski", "alexk@yahoo.com");
        EmployeeVO empThree = new EmployeeVO(3, "Steve", "Waugh", "swaugh@gmail.com");

        list.add(empOne);
        list.add(empTwo);
        list.add(empThree);

        when(dao.getEmployeeList()).thenReturn(list);

        //test
        List<EmployeeVO> empList = manager.getEmployeeList();

        assertEquals(3, empList.size());
        verify(dao, times(1)).getEmployeeList();
    }
}

暫無
暫無

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

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