SpringBoot+Mybatisフレームワークプロジェクトのユニットテストと統合テスト(下)
7885 ワード
統合テスト
統合テストでは、サービスを開始し、データベースに接続する必要があるため、このブロックを構成する必要があります.私はSpringBootの集積テストに接触したことがなくて、だから以下の3つの大きい穴を踏んで、みんなに分かち合うことを望みます!
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"application.yml"})
@DirtiesContext
を追加するだけでテストを行うと、yml属性プロファイルを識別できません.また、「最初の行に識別できない文字がある」というエラーも報告されます.以下の通りです:@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(
classes = Application.class,
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT
)
@DirtiesContext
この中で、@SpringBootTestの注釈を発見しました.SpringBootプロジェクトのテストに使用されます.このうち、classes = Application.class,
は必須ではありません.このテストクラスをパッケージ化してpackageの下に置くこともできます.これにより、ApplicationというSpringBootの起動項目を認識することができます.一方、@DirtiesContext:Springコンテナコンテキストを破壊するテスト方法がある場合は、Spring TestContextがテスト後にSpringコンテナのコンテキストをリフレッシュするために、テスト方法に@DirtiesContext注記を明示的に追加できます.<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
dependency>
<dependency>
<artifactId>tomcat-jdbcartifactId>
<groupId>org.apache.tomcatgroupId>
dependency>
mybatis-Spring-boot-starterではデフォルトjdbcがデータソースとして使用されています!以前のpomではtomcat-jdbcという依存項目を導入するのを忘れていたので、データソースが見つかりませんでした!ライブラリでは、この原理が使用されます!複数のデータソースを切り替えます.@ConditionalOnClass(org.apache.tomcat.jdbc.pool.DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.type", havingValue = "org.apache.tomcat.jdbc.pool.DataSource", matchIfMissing = true)
static class Tomcat extends DataSourceConfiguration {
@Bean
@ConfigurationProperties("spring.datasource.tomcat")
public org.apache.tomcat.jdbc.pool.DataSource dataSource(
DataSourceProperties properties) {
org.apache.tomcat.jdbc.pool.DataSource dataSource = createDataSource(
properties, org.apache.tomcat.jdbc.pool.DataSource.class);
DatabaseDriver databaseDriver = DatabaseDriver
.fromJdbcUrl(properties.determineUrl());
String validationQuery = databaseDriver.getValidationQuery();
if (validationQuery != null) {
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery(validationQuery);
}
return dataSource;
}
}
以上のコードはSpring-Boot-autoconfigure jarパッケージのDataSourceConfigurationである.JAvaプロファイルは、さまざまなデータソースを識別するために使用されます.このうち`@ConfigurationOnProperty()`は、このデータソースに一致していないことを示し、次のデータソースの構成をロードします.`@ConditionalOnClass()`はopgが必要であることを示す.apache.tomcat.jdbc.pool.DataSource.classクラスは、このデータソースをロードします!@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(
classes = Application.class,
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT
)
@DirtiesContext
public class dataOpTest {
private TBookController tBookController = new TBookController();
public TBookMapper tBookMapper;
@Test
public void testIfExistByName(){
String bk_name = "c++";
int existCount = tBookController.ifExist(bk_name);
Assert.assertEquals(existCount, 1);
}
}
のように単純にnewの1つのcontrollerを除去しなければならなくて、ただポインタの異常を報告するだけで、:@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(
classes = Application.class,
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT
)
@DirtiesContext
public class dataOpTest {
@AutoWired
private TBookController tBookController = new TBookController();
public TBookMapper tBookMapper;
@Test
public void testIfExistByName(){
String bk_name = "c++";
int existCount = tBookController.ifExist(bk_name);
Assert.assertEquals(existCount, 1);
}
}
@Autowiredだけがcontrollerがロードする必要がある各beanを入れます!