0

注釈を使用して MyBatis を使用して実装された DAO の単体テストを作成しようとしています。その DAO をインスタンス化して、(インメモリ) データベースに対して単体テストを行いたいと考えています。ただし、インスタンス化する唯一の方法は、構成ファイルのメソッドのみをSqlSessionFactory使用することです。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 に答える