LoginSignup
6
8

More than 5 years have passed since last update.

Spring+Mybatisでマッパーのテストを階層化

Posted at

Spring+Mybatisで、マッパーのユニットテストを階層化するやり方。

注入する必要があるのでSpringJUnit4ClassRunnerを使うのですが、これとHierarchicalContextRunnerの組み合わせがうまくいかなかったので、Enclosedとabstract classを使って実現。

まずは下記のような抽象クラスを用意します。ここでSpringJUnit4ClassRunnerのもとでマッパーに注入されます。

MapperTestBase
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-context.xml" })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,TransactionalTestExecutionListener.class})
public abstract class MapperTestBase { // abstractにしないと、このクラスもテスト対象になるので注意

    @Autowired
    protected  HogeMapper mapper;

}

実際のテストクラスは下記のように、Enclosedで階層化していき、テストメソッドを書くclassでMapperTestBaseを継承させます。

@RunWith(Enclosed.class)
public class HogeMapperTest  {

    @RunWith(Enclosed.class)
    public static class findById { //マッパーに定義しているメソッド毎に階層を切るイメージ

        public static class IDが存在しない extends MapperTestBase {

            @Test
            public void nullを返す() {
               /* */
            }

        }

    public static class IDが存在する extends MapperTestBase {

            @Test
            public void オブジェクトを返す() {
               /* */
            }

        }



    }

abstract classでランナーも含んでテストの設定を共通化できたことになるかと。

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8