Springbootテスト
7916 ワード
Springbootテスト @RunWith @ContextConfiguration XML方式 classpathとclasspath*の違い: Java方式 SpringBootテスト @SpringBootTes SpringBootテスト手順 具体的な試験例1 具体的な試験例2 起動エントリクラス を記述する. Controllerクラス作成 作成テストクラス 試験環境でbean を取得するテスト環境でのみ有効なbean 参考文献 @RunWith
@RunWithは中国語に訳してテストランナで、JUnitのすべてのテスト方法はテストランナが実行します.クラスが@RunWithコメントを使用するか、@RunWithコメントを使用するクラスを継承すると、JUnitは開発者がjunit内部で構築するのではなく、参照されたクラスを呼び出してクラス内のテストを実行します.
JUnitはユニットテストにデフォルトのテストランナBlockJUnit 4 ClassRunnerを提供したが、デフォルトのランナを使用する必要は制限されていない.@RunWith(JUnit 4.class)とは、JUnit 4で実行することです
@RunWith(SpringJUnit 4 ClassRunner.class)は、Springテスト環境@RunWith(SpringRunner.class):SpringRunnerはSpringJUnit 4 ClassRunnerの別名です.
@RunWith(Suite.class)ならテストセットですが、
@ContextConfiguration
@ContextConfiguration注記は、通常@RunWith注記とともに使用されるbeanをテストクラスにインポートしたいことを示します.
クラスに注記@Componentが追加されると、自動的にbeanになり、Springプロファイルに表示される構成は不要になります.これらのbeanを集めるには通常2つの方法がある:Javaの方法とXMLの方法.これらのbeanが収集された後、あるテストクラスで@Autowired注釈を使用してこれらの収集されたbeanを導入したい場合は、このテストクラスに@ContextConfiguration注釈を追加して、このテストクラスをインポートしたいいくつかのbeanを表示するだけです.
XML方式
まず、高齢者が使用するXMLの方法を見てみましょう.
このXMLファイルは、comパッケージのbeanをすべてラベルで自動的にスキャンします.
次はテストできます.
普通はこう書きます.
@ContextConfigurationカッコのlocations={"classpath***.xml"}はclassパスのすべてを表す.xmlファイルが含まれている場合、作成したばかりのXMLファイルが含まれている場合、自動スキャンのbeanが入手できます.この場合、テストクラスで@Autowired注釈を使用して、以前に自動スキャンパッケージの下にあったすべてのbeanを取得できます.
classpathとclasspath*の違い:
classpath:classパスでファイルを探すだけです.
classpath*:classパスだけでなくjarファイル(classパス)でも検索できます.単一ファイル
@ContextConfiguration(Locations=“classpath:applicationContext.xml”) @ContextConfiguration(classes = SimpleConfiguration.class)
複数のファイルの場合、{}を使用できます.
@ContextConfiguration(locations = { “classpath:spring1.xml”, “classpath:spring2.xml” })
Java方式
Javaを使うと簡単になりますが、XMLほど煩雑なファイルを書く必要はありません.XMLファイルの代わりにJavaクラスを作成することができます.このクラスに@Configuration注釈を付けるだけで、@ComponentScan注釈を加えると自動スキャンが開きます.注釈に括弧の中のものがなければ、@ComponentScanのデフォルトでは、構成クラスと同じパッケージがスキャンされます.
テストしたい場合は、次のように書くことができます.
SpringBootテスト
@SpringBootTes
このときSpringBoot主クラスもbeanのコレクターとして扱われる.前述のCDPlayConfigと同様です.
SpringBootテスト手順
テストクラスに直接次の2つの注記@RunWith(SpringRunner.class)@SpringBootTestを付けるとspringのコンテナのインスタンスが取得され、@Autowiredが構成されている場合は自動的にオブジェクトが注入されます.
具体的なテスト例1
src/mainでUserServiceクラスを作成し、それをテストするだけで、そのユニットテストクラス(command+shift+Tショートカットキーを使用)を生産し、生成したtestクラスはsrc/testで
Springboot起動クラス:
テストクラス:
具体的なテスト例2
スタートアップエントリクラスの作成
Controllerクラスの作成
テストクラスの作成
ここで、classes属性は起動クラス、SpringBootTestを指定する.WebEnvironment.RANDOM_PORTは、テストクラス@LocalServerPortとともに属性を注入する際によく使用されます.ポート番号がランダムに生成されます.
テスト環境でbeanを取得する
src/mainでインスタンスUserを新規作成
src/testでテストクラステストを作成します.
テスト環境でのみ有効なbean
src/testで2つのクラスを新規作成し、@TestComponentと@TestConfigurationの2つの注釈修飾をそれぞれ使用することを発見しました.これらのクラスはテスト環境でのみ有効です.
テストクラス:
@SpringBootTest注記のパラメータclassesにパラメータを追加する必要があります.これは、特定のクラスをテスト環境のコンテナに組み込むことを示します.
参考文献
@RunWithは中国語に訳してテストランナで、JUnitのすべてのテスト方法はテストランナが実行します.クラスが@RunWithコメントを使用するか、@RunWithコメントを使用するクラスを継承すると、JUnitは開発者がjunit内部で構築するのではなく、参照されたクラスを呼び出してクラス内のテストを実行します.
JUnitはユニットテストにデフォルトのテストランナBlockJUnit 4 ClassRunnerを提供したが、デフォルトのランナを使用する必要は制限されていない.@RunWith(JUnit 4.class)とは、JUnit 4で実行することです
@RunWith(SpringJUnit 4 ClassRunner.class)は、Springテスト環境@RunWith(SpringRunner.class):SpringRunnerはSpringJUnit 4 ClassRunnerの別名です.
@RunWith(Suite.class)ならテストセットですが、
@ContextConfiguration
@ContextConfiguration注記は、通常@RunWith注記とともに使用されるbeanをテストクラスにインポートしたいことを示します.
クラスに注記@Componentが追加されると、自動的にbeanになり、Springプロファイルに表示される構成は不要になります.これらのbeanを集めるには通常2つの方法がある:Javaの方法とXMLの方法.これらのbeanが収集された後、あるテストクラスで@Autowired注釈を使用してこれらの収集されたbeanを導入したい場合は、このテストクラスに@ContextConfiguration注釈を追加して、このテストクラスをインポートしたいいくつかのbeanを表示するだけです.
XML方式
まず、高齢者が使用するXMLの方法を見てみましょう.
このXMLファイルは、comパッケージのbeanをすべてラベルで自動的にスキャンします.
次はテストできます.
普通はこう書きます.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:/*.xml"})
public class CDPlayerTest {
}
@ContextConfigurationカッコのlocations={"classpath***.xml"}はclassパスのすべてを表す.xmlファイルが含まれている場合、作成したばかりのXMLファイルが含まれている場合、自動スキャンのbeanが入手できます.この場合、テストクラスで@Autowired注釈を使用して、以前に自動スキャンパッケージの下にあったすべてのbeanを取得できます.
classpathとclasspath*の違い:
classpath:classパスでファイルを探すだけです.
classpath*:classパスだけでなくjarファイル(classパス)でも検索できます.単一ファイル
@ContextConfiguration(Locations=“classpath:applicationContext.xml”) @ContextConfiguration(classes = SimpleConfiguration.class)
複数のファイルの場合、{}を使用できます.
@ContextConfiguration(locations = { “classpath:spring1.xml”, “classpath:spring2.xml” })
Java方式
Javaを使うと簡単になりますが、XMLほど煩雑なファイルを書く必要はありません.XMLファイルの代わりにJavaクラスを作成することができます.このクラスに@Configuration注釈を付けるだけで、@ComponentScan注釈を加えると自動スキャンが開きます.注釈に括弧の中のものがなければ、@ComponentScanのデフォルトでは、構成クラスと同じパッケージがスキャンされます.
@Configuration
@ComponentScan
public class CDPlayConfig {
}
テストしたい場合は、次のように書くことができます.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayConfig.class)
public class CDPlayerTest {
}
SpringBootテスト
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class Test {
}
@SpringBootTes
@SpringBootTest SpringBoot bean 。
このときSpringBoot主クラスもbeanのコレクターとして扱われる.前述のCDPlayConfigと同様です.
SpringBootテスト手順
テストクラスに直接次の2つの注記@RunWith(SpringRunner.class)@SpringBootTestを付けるとspringのコンテナのインスタンスが取得され、@Autowiredが構成されている場合は自動的にオブジェクトが注入されます.
具体的なテスト例1
src/mainでUserServiceクラスを作成し、それをテストするだけで、そのユニットテストクラス(command+shift+Tショートカットキーを使用)を生産し、生成したtestクラスはsrc/testで
@Service
public class UserService {
public Integer addUser(String username){
System.out.println("user dao adduser [username="+username+"]");
if(username == null){
return 0;
}
return 1;
}
}
Springboot起動クラス:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
テストクラス:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@Test
public void addUser() throws Exception {
Assert.assertEquals(Integer.valueOf(1),userService.addUser("zhihao.miao"));
Assert.assertEquals(Integer.valueOf(0),userService.addUser(null));
}
}
具体的なテスト例2
スタートアップエントリクラスの作成
@SpringBootApplication
public class StartUpApplication {
public static void main(String[] args) {
SpringApplication.run(StartUpApplication.class, args);
}
}
Controllerクラスの作成
@RestController
public class HelloController {
@RequestMapping("/")
public String index() {
return "Hello Spring Boot,Index!";
}
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test() {
return "Spring Boot Test Demo!";
}
}
テストクラスの作成
@RunWith(SpringRunner.class)
@SpringBootTest(classes = StartUpApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerTest {
/**
* @LocalServerPort @Value("${local.server.port}")
*/
@LocalServerPort
private int port;
private URL base;
@Autowired
private TestRestTemplate restTemplate;
@Before
public void setUp() throws Exception {
String url = String.format("http://localhost:%d/", port);
System.out.println(String.format("port is : [%d]", port));
this.base = new URL(url);
}
/**
* "/test" ,
* @throws Exception
*/
@Test
public void test1() throws Exception {
ResponseEntity response = this.restTemplate.getForEntity(
this.base.toString() + "/test", String.class, "");
System.out.println(String.format(" :%s", response.getBody()));
}
ここで、classes属性は起動クラス、SpringBootTestを指定する.WebEnvironment.RANDOM_PORTは、テストクラス@LocalServerPortとともに属性を注入する際によく使用されます.ポート番号がランダムに生成されます.
テスト環境でbeanを取得する
src/mainでインスタンスUserを新規作成
@Component
public class User {
}
src/testでテストクラステストを作成します.
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserTest {
@Autowired
public ApplicationContext context;
@Test
public void testNotNull(){
Assert.assertNotNull(context.getBean(User.class));
}
}
テスト環境でのみ有効なbean
src/testで2つのクラスを新規作成し、@TestComponentと@TestConfigurationの2つの注釈修飾をそれぞれ使用することを発見しました.これらのクラスはテスト環境でのみ有効です.
@TestComponent
public class Cat {
public void index(){
System.out.println("cat index");
}
}
@TestConfiguration
public class TestBeanConfiguration {
@Bean
public Runnable createRunnable(){
return () -> System.out.println("=====createRunnable=======");
}
}
テストクラス:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {TestBeanConfiguration.class,Cat.class})
public class TestApplication {
@Autowired
public ApplicationContext context;
@Test
public void testNotNull(){
Runnable runnable = context.getBean(Runnable.class);
runnable.run();
System.out.println("--------");
Cat cat = context.getBean(Cat.class);
cat.index();
}
}
@SpringBootTest注記のパラメータclassesにパラメータを追加する必要があります.これは、特定のクラスをテスト環境のコンテナに組み込むことを示します.
参考文献