gpt4 book ai didi

java - 在 MockitoJUnitRunner 下运行测试时,DAO 未 Autowiring

转载 作者:行者123 更新时间:2023-12-02 05:03:55 25 4
gpt4 key购买 nike

我需要测试parserService。不幸的是,它表明 RecordDao 对象应该是 Autowired 的,但事实并非如此,在运行测试时它仍然是 null 。如何解决?

解析器 Controller 测试

@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();
}

}

}

服务

@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;
}
}

RecordDao

import domain.Record;
import org.springframework.data.repository.CrudRepository;

public interface RecordDao extends CrudRepository<Record, Long> {
}

最佳答案

除非您明确测试您的 DAO,否则您可能应该 mock 它。你可以监视你的服务,然后告诉mockito在调用它的get方法时注入(inject)模拟的dao。

doReturn(mockDoa).when(parserService).getRecordDao()

如果您坚持要在那里获取真正的 dao,那么您应该在测试中启动一个 spring 应用程序上下文,并让 spring 管理所有 bean,而不是自己初始化它们。 Autowiring 不起作用的唯一原因是因为该服务是手动初始化的,并且不是任何 spring 上下文的一部分,因此 spring 不知道它,也不知道它需要 dao!

关于java - 在 MockitoJUnitRunner 下运行测试时,DAO 未 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27986777/

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