[英]Cannot instantiate class DataAccess because of mocking DB mapper in unit test
嘗試測試我的數據訪問類時遇到錯誤:
原因:org.apache.ibatis.builder.BuilderException:解析SQL Mapper配置時出錯。 原因:org.apache.ibatis.datasource.DataSourceException
測試類別:
@Tested
DataAccess dataAccess;
@Mock
Mapper mapper;
DataAccess類:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.