Java 在MockitoJUnitRunner下运行测试时,DAO未自动连接
我需要测试parserService。不幸的是,它显示了RecordDao对象假设不是自动连接的,但它不是,它在运行测试时保持Java 在MockitoJUnitRunner下运行测试时,DAO未自动连接,java,spring,mockito,Java,Spring,Mockito,我需要测试parserService。不幸的是,它显示了RecordDao对象假设不是自动连接的,但它不是,它在运行测试时保持null。如何修复它 ParserControllerTest @RunWith(MockitoJUnitRunner.class) public class ParserControllerTest { @InjectMocks private ParserService parserService; private ParserContro
null
。如何修复它
ParserControllerTest
@RunWith(MockitoJUnitRunner.class)
public class ParserControllerTest {
@InjectMocks
private ParserService parserService;
private ParserController parserController;
@Before
public void setUp() throws Exception {
parserController = new ParserController(parserService);
}
@Test
public void parseFileToRecordEntity(){
try {
InputStream is = new FileInputStream(new File("exampleLog.txt"));
List<Record> records = parserService.parse(IOUtils.toByteArray(is));
for(Record r: records){
System.out.println(r.toString());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@RunWith(MockitoJUnitRunner.class)
公共类ParserController测试{
@注射模拟
专用ParserService ParserService;
专用ParserController ParserController;
@以前
public void setUp()引发异常{
parserController=新的parserController(parserService);
}
@试验
public void parseFileToRecordEntity(){
试一试{
InputStream is=新文件InputStream(新文件(“exampleLog.txt”);
List records=parserService.parse(IOUtils.toByteArray(is));
用于(记录r:记录){
System.out.println(r.toString());
}
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
服务
@Service("parserService")
public class ParserService {
@Autowired
RecordDao recordDao;
public List<Record> parse(byte[] fileBytes) {
//....
if(!records.isEmpty()){
for(Record r: records){
recordDao.save(r);
}
}
return records;
}
}
@Service(“parserService”)
公共类ParserService{
@自动连线
RecordDao RecordDao;
公共列表解析(字节[]文件字节){
//....
如果(!records.isEmpty()){
用于(记录r:记录){
recordDao.save(r);
}
}
退货记录;
}
}
RecordDao
import domain.Record;
import org.springframework.data.repository.CrudRepository;
public interface RecordDao extends CrudRepository<Record, Long> {
}
导入域.记录;
导入org.springframework.data.repository.crudepository;
公共接口RecordDao扩展了Crudepository{
}
除非您显式地测试DAO,否则您可能应该模拟它。您可以监视您的服务,然后告诉mockito在调用其get方法时注入模拟dao
doReturn(mockDoa).when(parserService).getRecordDao()
如果您坚持要将真正的dao放在其中,那么您应该在测试中启动一个spring应用程序上下文,让spring管理您的所有bean,而不是自己初始化它们。autowired不工作的唯一原因是因为服务是手动初始化的,并且不属于任何spring上下文,因此spring不知道它,也不知道它需要dao 使用Spring而不是Mockito。。。Mockito对自动连线一无所知。您应该添加一个字段
RecordDao
进行测试,并用@Mock
注释该字段然后删除@RunWith(MockitoJUnitRunner.class)
。但是同样的错误,您不应该删除@RunWith
,因为它使用了基于Mockito的运行程序,能够理解@Mock
。如果将其删除,@Mock
和@injectmock
注释将无效。