【发布时间】:2022-01-04 10:54:21
【问题描述】:
所以我正在尝试测试我的 api,当我尝试使用存储库时它给了我一个空指针异常。
假设我的 application.yml(inside test/resources) 中有一个用于测试的 h2 数据库,如下所示:
spring:
profiles:
active: test
datasource:
username:
password:
url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;
platform: h2
这是我的 ControllerAPItest.java
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureTestDatabase
class ControllerAPITest {
@Mock
CompaniaRepository companiaRepository;
@Mock
DefaultGroupRepository defaultGroupRepository;
@Mock
OfficeRepository officeRepository;
@InjectMocks
CompaniaServiceImpl companiaService;
ControllerAPI controllerAPI = new ControllerAPI(companiaService);
@BeforeEach
void setUp() {
Compania compania = new Compania();
compania.setName("companiaTest");
compania.setDominio("dominioTest");
compania.setAltas("altasTest");
compania.setBajas("bajasTest");
compania.setDefault_group(null);
compania.setOffice(null);
companiaRepository.save(compania);
}
@AfterEach
void tearDown() {
companiaRepository.deleteAll();
}
@Test
void getByField() {
}
@Test
void getCompanias() {
System.out.println(controllerAPI.GetCompanias());
}
}
这是我得到的错误的输出:
java.lang.NullPointerException 在 控制器.ControllerAPI.GetCompanias(ControllerAPI.java:114) 在 controller.ControllerAPITest.getCompanias(ControllerAPITest.java:65)
它指向的行是:
companiaRepository.save(compania);
这是完整的错误:https://textdoc.co/eGmu72wa1ydEoJ4T
我的代码发生了什么?
谢谢!
编辑。这是我的控制器中的 getCompanias。
@ResponseStatus(HttpStatus.OK)
@GetMapping()
public Map<String, List<Compania>> GetCompanias() {
Map<String, List<Compania>> mappedResult = Collections.singletonMap("result", companiaService.getCompanias());
return mappedResult;
// return companiaService.getCompanias();
}
这里使用了companiaService:
public List<Compania> getCompanias() {
return companiaRepository.findAll();
}
谢谢!
【问题讨论】:
-
在您创建
controllerAPI时,尚未创建companiaService。在@Before方法中创建controllerAPI。 -
@tgdavies 不,但还是谢谢!我认为与模拟它没有实例化它或类似的东西有关:S
-
您需要在问题中的 controller.ControllerAPI.GetCompanias(ControllerAPI.java:114) 处显示代码。
-
@tgdavies 我已经编辑了我的问题,谢谢!
标签: java spring-boot api testing mocking