0

我正在尝试为使用 MyBatis 使用注释实现的 DAO 编写单元测试。我想实例化该 DAO 以针对我的(内存中)数据库进行单元测试。但是,我看到实例化它SqlSessionFactory的唯一方法是通过 a ,而我看到实例化其中一个的SqlSessionFactoryBuilder唯一方法是使用配置文件中唯一的方法。

但是,在我的单元测试中,我已经与内存数据库建立了连接,我可以使用它来以某种方式实例化映射器吗?Connection如果我需要进行测试,这也将允许我模拟或监视后者。

4

2 回答 2

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实例。

于 2012-11-20T15:37:11.243 回答
1

使用junit对此进行测试。查看此链接了解更多信息

在这种情况下,该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");
 }
于 2012-11-20T15:30:21.650 回答