スプリングブートMybatis-Plusデータベースシングルテスト実際の戦闘(3つの方法)

  ユニットテストは長い間ホットなトピックでした。この記事では単一のテストについて説明したり、作成する必要はありません。参考資料1を参照してください。個人的には、優れた開発者ごとに単一のメジャーを作成し、必要なスキルを1つのメジャーに作成する必要があると考えています。ここでは利点については説明しませんが、この記事で焦点を当てているトピック、優れたデータベース単一テストの作成方法について簡単に説明します。

  なぜデータベースの単一テストを作成したいのですか?複雑なSQLステートメントを作成した後、自信を持ってテストを作成した後、バグの大部分がSQLステートメントの問題によるものであることがわかった、または書き込みが少ないなど、同様の経験があると思いますカンマ、またはフィールドが欠落している、私はすごいことを後悔しています、それを書いた後にそれをテストしてみませんか!

  大丈夫です!これにより、データベースの単一テストの作成方法がわかり、データベース関連のバグに簡単に別れを告げることができます。

1.データベースのサンプルと環境

  例としてuserテーブルを使用してこのチュートリアルを開始しましょう。
ユーザーテーブル

図1.1ユーザーテーブルのER図

  mybatis-plusプラグインを導入した後、マッパークラスは次のようになります。

@Mapper
public interface UserMapper  extends BaseMapper<UserDO> {
    
    
}

  全体的な環境:

  1. スプリングブーツ:1.5.18.RELEASE
  2. mybatis:3.5.1
  3. mybatis plus:3.4.0(現時点では最新バージョンです。最新バージョンの機能を使用します)

  ここでは、mybatis plusが提供するいくつかのCRUDを直接テストします。もちろん、これらのCRUDは一般的に間違っていません。実際のプロジェクトでは、カスタムSQLをユニットテストするだけで済みます。

2.方法1:環境全体を開始します

  この方法は、日常の環境で最も一般的に使用されるはずです。バージョン1.4.0以降にSpringBootによって導入された@SpringBootTestアノテーションは、ユニットテストに必要なすべての環境を開始できます。もちろん、プロジェクトで他の分散サービスを使用する場合は、彼もこれらのサービスも開始されます。単一のテストコードは次のとおりです。

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
    
    

    @Autowired
    private UserMapper userMapper;


    @Test
    public void testCurd() {
    
    
        UserDO userDO = new UserDO();
        userDO.setId(7777L);
        userDO.setGmtModified(new Date());
        userDO.setGmtCreate(new Date());
        userDO.setRealName("ke");
        userDO.setUserName("ni");
        userMapper.insert(userDO);

        UserDO select = userMapper.selectById(1);
        System.out.println(select);
    }
}

@SpringBootTestアノテーションは、オンデマンドで開始およびロードする必要があるクラスを設定できます

3.方法2:データベース環境+リモートデータベースのみを起動します

  参考文献2では、次の図に示すように、テストスターターが最新のmybatis-plusリリースバージョン(3.4.0)で導入されています。

Mybatisの新機能-プラス3.4.0

図3.1Mybatis-plus3.4.0ではテストモジュールが導入されています

  モジュールは新しい注釈を導入します@MybatisPlusTest。この注釈は、特定の特定のモジュールを単一のテストコードで直接開始するのに役立ちます。

@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class UserMapperTest {
    
    

    @Autowired
    private UserMapper userMapper;


    @Test
    public void testCurd() {
    
    
        UserDO userDO = new UserDO();
        userDO.setId(7777L);
        userDO.setGmtModified(new Date());
        userDO.setGmtCreate(new Date());
        userDO.setRealName("ke");
        userDO.setUserName("ni");
        userMapper.insert(userDO);

        UserDO select = userMapper.selectById(1);
        System.out.println(select);
    }
}

  簡単ですか?ただし、次の重要な点に注意する必要があります。

  • @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)役割は、自動的に構成された組み込みメモリデータソースの代わりにカスタムデータソースを使用することです
  • プロジェクトでdruidと同様の接続プールを使用している場合、@MybatisPlusTest注釈によって接続プールフレームワークが開始されないため、テストモジュールのアプリケーション構成ファイルでjdbcデータソースを直接使用する必要があります。一般的な構成ファイルapplication.ymlは次のとおりです。
spring:
  datasource:
    url: jdbc:mysql://xxx.xxx.1.110:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456

4.方法3:データベース環境+ローカルデータベースのみを起動します

  方法2に基づいて、次の手順に従います。

  1. @AutoConfigureTestDatabas注釈を削除し、組み込みデータベースのテストを直接開始します。ここでは、H2メモリデータベースを選択し、最初にpomにH2データベースのmaven依存関係を導入します。
  2. 次に、テスト環境にsechema.sqlファイルを導入します。このファイルはデータベースを初期化するために使用されます。コアはテーブルステートメントを作成することです。
  3. 最後に、このページを削除した後の書き込み方法は2つ目と同じなので、ここでは説明しません。

注: sechema.sqlファイルは、組み込みデータベースの構文に準拠している必要があります。この場合は、h2データベースです。mysqlデータベースを使用している場合は、mysqlデータベースの構文をh2データベースの構文に変換する必要があります。

5. @ MybatisPlusTestアノテーションの原則

  以前にMyBatis-Spring-Boot-Starter-Test @MybatisTest(リファレンス3)を使用したことがある場合@MybatisPlusTest注釈の原則がそれに類似しており、すべてがスプリングブートの自動構成を制限し(リファレンス4)、特定のロードのみが必要であることがわかります。構成は可能です。注釈のソースコードを見てみましょう。

@Target({
    
    ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(MybatisPlusTestContextBootstrapper.class)
@ExtendWith({
    
    SpringExtension.class})
@OverrideAutoConfiguration(
    enabled = false
)
@TypeExcludeFilters({
    
    MybatisPlusTypeExcludeFilter.class})
@Transactional
@AutoConfigureCache
@AutoConfigureMybatisPlus
@AutoConfigureTestDatabase
@ImportAutoConfiguration
public @interface MybatisPlusTest {
    
    
    String[] properties() default {
    
    };

    boolean useDefaultFilters() default true;

    Filter[] includeFilters() default {
    
    };

    Filter[] excludeFilters() default {
    
    };

    @AliasFor(
        annotation = ImportAutoConfiguration.class,
        attribute = "exclude"
    )
    Class<?>[] excludeAutoConfiguration() default {
    
    };
}
  • @OverrideAutoConfiguration(enabled = false)重要なのは、自動構成をオフにし、通常、スプリングブートプロジェクトでは、有効化をオンにします。
  • @AutoConfigureMybatisPlus注釈はカスタム注釈です。この注釈は、ロードする必要のあるすべてのロードクラスを定義します。自動的に構成されるクラスは、spring.factoriesで宣言されます。
# AutoConfigureMybatis auto-configuration imports
com.baomidou.mybatisplus.test.autoconfigure.AutoConfigureMybatisPlus=\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,\
com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

  • @AutoConfigureTestDatabase注釈は、実際のデータベースの代わりにメモリ内データベースが使用されていることを示しています

  これらの制限と規制により、mybatis-plusは必要な構成をテスト環境に自動的にロードできるため、不要なリソースのロードが不要になります。

6.まとめ

3つのデータベースの単一テストの要約

図6.13つのデータベースの単一テストの要約

  mysqlデータベースを使用している場合は、2番目の方法をお勧めします。mysq文法をh2に変換する問題を解決できる場合は、方法3を使用することをお勧めします。これにより、リモートデータベースに接続しなくても、オフラインの状況でも1つのテストを実行できます。

PS:mysql変換h2を完了するための優れたツールがある場合は、コメント領域でそれをお勧めできます。カスタム書き込み変換、いくつかのプロフェッショナルツールなど、長い間探していましたが、Navicatによってエクスポートされた文の変換はあまり良くないと感じています。うまく機能します。

7.参考資料

[1]本当にユニットテストが必要ですか?
[2] Mybatis-Plusリリースバージョン
[3] MyBatis-Spring-Boot-Starter-Test
[4] SpringBootの4つのアーティファクトの自動構成

おすすめ

転載: blog.csdn.net/u012397189/article/details/109288747