Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MockitoJUnitRunner下运行测试时,DAO未自动连接_Java_Spring_Mockito - Fatal编程技术网

Java 在MockitoJUnitRunner下运行测试时,DAO未自动连接

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

我需要测试parserService。不幸的是,它显示了RecordDao对象假设不是自动连接的,但它不是,它在运行测试时保持
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
注释将无效。