测试的正确类设置存在问题。
我有以下服务结构
我的服务:
接口
public interface ColumnsFromTableService {
List<ColumnsDto> getTableColumnsFromSource(DataProvider dataProvider, String tableName);
DataProviderSourceType myDataProviderSourceType();
@Autowired
default void regMe(ColumnsFromTableFacade columnsFromTableFacade){
columnsFromTableFacade.register(myDataProviderSourceType(),this);
}
}
Impl
@Service
@RequiredArgsConstructor
public class OracleColumnsFromTableServiceImpl implements ColumnsFromTableService {
private final DataProviderInsideDao dataProviderInsideDao;
@Override
public List<ColumnsDto> getTableColumnsFromSource(DataProvider dataProvider, String tableName) {
return dataProviderInsideDao.getColumnsByTableNameFromOracle(dataProvider, tableName);
}
@Override
public DataProviderSourceType myDataProviderSourceType() {
return DataProviderSourceType.ORACLE;
}
}
我的外表:
接口
public interface ColumnsFromTableFacade {
List<ColumnsDto> getTableColumnsFromSource(DataProvider dataProvider, String tableName);
void register(DataProviderSourceType dataProviderSourceType, ColumnsFromTableService columnsDataProviderService);
}
Impl
@Service
public class ColumnsFromTableFacadeImpl implements ColumnsFromTableFacade {
private final Map<DataProviderSourceType, ColumnsFromTableService> implementationMap = new HashMap<>();
@Override
public List<ColumnsDto> getTableColumnsFromSource(DataProvider dataProvider, String tableName) {
ColumnsFromTableService columnsFromTableService = implementationMap.get(dataProvider.getSourceType());
return columnsFromTableService.getTableColumnsFromSource(dataProvider,tableName);
}
@Override
public void register(DataProviderSourceType dataProviderSourceType, ColumnsFromTableService columnsDataProviderService) {
implementationMap.put(dataProviderSourceType, columnsDataProviderService);
}
}
为了使用,我在需要的地方注入了立面。
应用程序中一切正常。在创建ColumnsFromTableServicebean时,SpringBoot会在接口中看到@Autowired注释,并在facade中注册服务。但在测试这个外观时,我无法正确设置它。
我的测试:
@ExtendWith(MockitoExtension.class)
public class EasyServiceTest {
@InjectMocks
TablesFromSourceFacadeImpl tablesFromSourceFacade;
@Test
void test(){
tablesFromSourceFacade.getAllTablesFromSource(new DataProvider());
}
}
运行测试时,facade已成功实例化。但是带有实现的集合是空的。
在此处输入图像描述
我正在使用木星-5.7.1弹簧套-2.4.3
我决定做一个粗略的
@ExtendWith(MockitoExtension.class)
public class EasyServiceTest {
TablesFromSourceFacadeImpl tablesFromSourceFacade;
@InjectMocks
OracleTablesFromSourceServiceImpl oracleTablesFromSourceService;
@InjectMocks
OracleColumnsFromTableServiceImpl oracleColumnsFromTableService;
@BeforeEach
void setUp() {
tablesFromSourceFacade = new TablesFromSourceFacadeImpl();
tablesFromSourceFacade.register(postgresTablesFromSourceService.myDataProviderSourceType(),
postgresTablesFromSourceService);
tablesFromSourceFacade.register(oracleTablesFromSourceService.myDataProviderSourceType(),
oracleTablesFromSourceService);
}
@Test
void test(){
tablesFromSourceFacade.getAllTablesFromSource(new DataProvider());
}
}
更新的
这个问题的第二个解决方案是提出春季的整个背景或部分背景。但就我而言,这并不奏效,因为服务分散在不同的包中,我必须提出整个背景,这很重。