Dubbo的单元测试
近期在写项目的单元测试,Service层全是调用Dubbo的,之前也没做过这方面的积累,现在将它记下,分享一下。
测试的Service层
接口IAppService:
public interface IAppService {
Object AppList(InsightOptions options);
List delete(List<String> CIIds);
}
实现类AppServiceImpl :
public class AppServiceImpl implements IAppService {
@DubboReference(version = "1.0.0", timeout = 60000, check = false)
private MdcCmdbApi mdcCmdbApi;//调用dubbo接口
@Override
public Object AppList(InsightOptions options) {
...
return mdcCmdbApi.queryAppList(options);
}
@Override
public List delete(InsightOptions options) {
...
List list =mdcCmdbApi.batchDeleteCiDataById(options);
return list ;
}
单元测试
首先模拟调用dubbo的接口数据,先实现dubbo接口
@Slf4j
@Service
public class MdcCmdbApiMock implements MdcCmdbApi {
@Override
public PageableData<CiDto> queryAppList(CommonReq commonReq) {
List<CiDto> content = new ArrayList();
CiDto ciDto = new CiDto();
ciDto.setId("222");
ciDto.setParentId("999");
CiDto ciDto1 = new CiDto();
ciDto1.setId("333");
ciDto1.setParentId("555");
PageableData.PageableDataBuilder<CiDto> pagebuilder = PageableData.builder();
PageableData<CiDto> pageableData = pagebuilder.build();
pageableData.setPage(1);
pageableData.setTotal(22);
pageableData.setPageSize(22);
pageableData.setContent(content);
return pageableData;
}
@Override
public List<OptStatusResp> batchDeleteCiDataById(List<IdReq> list) {
List<OptStatusResp> list1 = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
OptStatusResp optStatusResp =
new OptStatusResp(list.get(i).getId(), 0);
list1.add(optStatusResp);
}
return list1;
}
测试Service层
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AppserverBizApplicationTest.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class AppServiceTest {
@BeforeClass
public static void setSystemPros() {
System.setProperty("spring.config.location", "../config/main/,../config/test/,src/test/resources/");
}
@InjectMocks
@Autowired
private AppServiceImpl iAppServiceImp;//要测试的Service层
@Autowired
MdcCmdbApiMock mdcCmdbApiMock; //dubbo mock的数据
//在执行Service层之前先初始化dubbo的数据,并将Service的引用dubbo的接口替换成mock的实现
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
MockitoAnnotations.initMocks(mdcCmdbApiMock);//初始化dubbo mock的数据
ReflectionTestUtils.setField(iAppServiceImp,"mdcCmdbApi",mdcCmdbApiMock);//调用Service层的代码,将dubbo的调用函数替换成已经初始化的函数
}
@Test
public void AppList() {
InsightOptions options = new InsightOptions();
options.setPageSize(22);
options.setPageIndex(1);
Object appList = iAppServiceImp.AppList(getOptions());
Assert.assertNotNull(appList);
}
@Test
public void AppDelete() {
List list = new ArrayList();
list.add("1122");
List delete = iAppServiceImp.delete(list);
Assert.assertNotNull(delete);
}
}
项目文件位置: