![](/img/trans.png)
[英]JUnit : Unit Test for abstract class in a Spring Boot app?
[英]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.