gpt4 book ai didi

java - 无法将服务注入(inject) Spring 测试

转载 作者:行者123 更新时间:2023-11-28 20:38:53 25 4
gpt4 key购买 nike

financialReportService 在 REST Controller 中为空,表示注入(inject)失败。

测试:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SnapshotfindocApp.class)
public class FindocResourceIntTest {
@Inject
private FinancialReportService financialReportService;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
FindocResource findocResource = new FindocResource();
ReflectionTestUtils.setField(findocResource, "findocRepository", findocRepository);
this.restFindocMockMvc = MockMvcBuilders.standaloneSetup(findocResource)
.setCustomArgumentResolvers(pageableArgumentResolver)
.setMessageConverters(jacksonMessageConverter).build();
}


@Test
@Transactional
public void getFinancialRecords() throws Exception {

// Get all the financial-reports
restFindocMockMvc.perform(get("/api/financial-reports"))
.andExpect(status().isOk());
List<Findoc> finReports = financialReportService.getFinancialReports();
for (Findoc fr : finReports) {
assertThat(fr.getNo_months()).isBetween(12, 18);
LocalDate documentTimeSpanLimit = LocalDate.now().minusMonths(18);
assertThat(fr.getFinancial_date()).isAfterOrEqualTo(documentTimeSpanLimit);
}
}

服务:

@Service
@Transactional
public class FinancialReportService {

private final Logger log = LoggerFactory.getLogger(FinancialReportService.class);

@Inject
private FinancialReportDAO financialReportDAO;

public List<Findoc> getFinancialReports(){
return financialReportDAO.getFinancialReports();
}

}

Controller :

@GetMapping("/financial-reports")
@Timed
public List<Findoc> getFinancialReports() {
log.debug("REST request to get financial records");
return financialReportService.getFinancialReports(); // financialReportService is null
}

更新:

该应用程序由 JHipster 生成。然后 new service和 DAO 文件被添加以启用对 H2 的自定义数据库查询。

最佳答案

@Inject服务后,还需要在setup()方法中设置字段。添加以下行应该可以解决您的问题

ReflectionTestUtils.setField(findocResource, "financialReportService", financialReportService);

另外,测试的以下部分看起来很奇怪。您正在两次获取财务报告。此文件是 FindocResourceIntTest,因此我将删除对 financialReportService 的任何直接调用。

    // Get all the financial-reports
restFindocMockMvc.perform(get("/api/financial-reports"))
.andExpect(status().isOk());
List<Findoc> finReports = financialReportService.getFinancialReports();

关于java - 无法将服务注入(inject) Spring 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41921697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com