gpt4 book ai didi

java - 由于在单元测试中模拟数据库映射器,无法实例化 DataAccess 类

转载 作者:行者123 更新时间:2023-12-02 10:24:31 26 4
gpt4 key购买 nike

尝试测试我的数据访问类时出现错误:

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException

测试类:

@Tested
DataAccess dataAccess;

@Mock
Mapper mapper;

数据访问类:

private Logger logger;

private final Mapper mapper;

public DataAccess() {
String loggerCategory = new properties().getLoggerCategory();
logger = LoggerFactory.getLogger(loggerCategory);

mapper = DBControl.getAutoClosingMapper(
Mapper.class, DataSource.source, logger);
}

DBControl(错误来自哪里):

private static final SqlSessionFactory sqlMapper;

static {
Reader reader = null;
String resource = "configuration.database.xml";
reader = Resources.getResourceAsReader(resource);

//the exception is getting thrown from this line
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
}

我在测试类中尝试了几种不同的mockito和jmockit注释,但每次都会遇到相同的错误。

我只需要模拟映射器。

最佳答案

我在这里注意到的一件事是,您正在使用 @Mock 注释来尝试模拟最终类变量,除非您在某个地方有构造函数,否则通常不会起作用。

例如

public class DataAccess{

private final Mapper mapper;
DataAccess(mapper){
this.mapper = mapper
// anything else
}
}

使用mockito你可以做这样的事情:

public class TestClass{
private DataAccess dataAccess = new DataAccess(Mockito.mock(Mapper.class));
}

此外,我通常会在声明 Logger 时实例化它;

private final Logger LOGGER = LoggerFactory.getLogger(getClass());

关于java - 由于在单元测试中模拟数据库映射器,无法实例化 DataAccess 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54077579/

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