我正在尝试使用注释为使用MyBatis实现的DAO编写单元测试。我想将DAO实例化为针对我的(内存中)数据库的单元测试。但是,我看到实例化它的唯一方法是通过SqlSessionFactory
,我看到实例化其中一个的唯一方法是使用SqlSessionFactoryBuilder
只有其配置文件的方法。
但是,在我的单元测试中,我已经连接到内存数据库,我可以使用它以某种方式实例化映射器吗?如果我需要进行测试,这也允许我稍后模拟或监视Connection
。
答案 0 :(得分:2)
SqlSessionFactory
类有openSession(Connection connection)
方法。您可以使用它来使用内存数据库中的SqlSession
来检索Connection
。
您可以通过编程方式构建SqlSessionFactory
,而无需使用包含以下代码的配置文件:
Environment environment = new Environment("ID", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMappers(mappersPackageName);
// Other configuration tweaks
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(configuration);
然后,您可以模拟或存根DataSource
以返回所需的Connection
实例。
答案 1 :(得分:1)
在这种情况下,setup()
方法是创建SqlSessionFactory
对象的正确点
@BeforeClass
public static void setUp() throws Exception {
log.info("starting up myBatis tests");
String resource = "mybatis.config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sf = new SqlSessionFactoryBuilder().build(reader,"testing");
}