Я пытаюсь издеваться над классом обслуживания ниже.
Я создал отдельный компонент Config, который я вызываю, как вы можете видеть ниже в коде: -
@Component
public class CrawlerService implements CrawlerServiceInterface {
private static final Logger LOGGER = LoggerFactory.getLogger(CrawlerService.class);
private final CrawlConfig config;
@Autowired
CrawlerFactory crawlerFactory;
@Autowired
public CrawlerService(@Qualifier(value = "CrawlerConfig") CrawlConfig config) {
this.config = config;
}
@Value("${com.prudential.noOfCrawlers}")
private int numberOfCrawlers;
@Override
public Object crawlService(String URL, int max) throws Exception {
LOGGER.info("In Service Class");
this.config.setMaxPagesToFetch(max);
PageFetcher pageFetcher = new PageFetcher(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
controller.addSeed(URL);
controller.start(crawlerFactory, numberOfCrawlers);
List<Object> crawlersLocalData = controller.getCrawlersLocalData();
LOGGER.info("End of Service Class");
return crawlersLocalData;
}
}
Проблема в том, что я получаю исключение нулевого указателя в this.config.setMaxPagesToFetch
.
Что я делаю не так?
Если я смоделировал некоторый зависимый объект с аннотацией @Mock
, значит ли это, что он не позволит изменить значение?
Вот тестовый класс: -
List<Object> obj=new ArrayList<Object>();
@Mock
private CrawlConfig config;
@Mock
CrawlerFactory crawlerFactory;
@Mock
CrawlController controller;
@InjectMocks
CrawlerService crawlerService = new CrawlerService(config);
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void testService() throws Exception {
when(controller.getCrawlersLocalData()).thenReturn(obj);
assertEquals(crawlerService.crawlService("https://vogella.com", 10), obj);
}