簡體   English   中英

由於在單元測試中模擬數據庫映射器,因此無法實例化DataAccess類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM