我正在尝试为使用 MyBatis 使用注释实现的 DAO 编写单元测试。我想实例化该 DAO 以针对我的(内存中)数据库进行单元测试。但是,我看到实例化它SqlSessionFactory
的唯一方法是通过 a ,而我看到实例化其中一个的SqlSessionFactoryBuilder
唯一方法是使用配置文件中唯一的方法。
但是,在我的单元测试中,我已经与内存数据库建立了连接,我可以使用它来以某种方式实例化映射器吗?Connection
如果我需要进行测试,这也将允许我模拟或监视后者。
我正在尝试为使用 MyBatis 使用注释实现的 DAO 编写单元测试。我想实例化该 DAO 以针对我的(内存中)数据库进行单元测试。但是,我看到实例化它SqlSessionFactory
的唯一方法是通过 a ,而我看到实例化其中一个的SqlSessionFactoryBuilder
唯一方法是使用配置文件中唯一的方法。
但是,在我的单元测试中,我已经与内存数据库建立了连接,我可以使用它来以某种方式实例化映射器吗?Connection
如果我需要进行测试,这也将允许我模拟或监视后者。
该类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
实例。
在这种情况下,该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");
}