単体テスト (モジュールテスト): テスト対象のコードの小さくて明確な機能が正しいかどうかを確認するために開発者によって書かれた小さなコードです。一般に、単体テストは、特定の条件 (またはシナリオ) での特定の機能の動作を判断するために使用されます。たとえば、並べ替えられたリストに大きな値を入力し、その値がリストの最後に表示されるようにすることができます。あるいは、string からパターンに一致する文字を削除し、その文字列にそれらの文字が実際に含まれていないことを確認することもできます。
簡単に言えば、単体テストとは、プログラム内の最小の機能モジュールをテストすることです。C 言語では関数、Java ではメソッドまたはクラスです。
目的はコードの品質を向上させることです。 古いテクノロジーである Junit が再び言及されていますが、それは他の目的ではなく、プロジェクトにおけるその重要性をある程度説明するためです。1. SpringBoot Web プロジェクトで通常の Java クラスを作成する Junit
の方法 Junit4 では、TestCase クラスを継承する必要はありません。@RunWith(SpringJUnit4ClassRunner.class) // SpringJUnit支持,由此引入Spring-Test框架支持! @SpringApplicationConfiguration(classes = SpringBootSampleApplication.class) // 指定我们SpringBoot工程的Application启动类 @WebAppConfiguration // 由于是Web项目,Junit需要模拟ServletContext,因此我们需要给我们的测试类加上@WebAppConfiguration。
package org.springboot.sample; import static org.junit.Assert.assertArrayEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.springboot.sample.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; /** * * @author 单红宇(365384722) * @create 2016年2月23日 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringBootSampleApplication.class) @WebAppConfiguration public class StudentTest { @Autowired private StudentService studentService; @Test public void likeName() { assertArrayEquals( new Object[]{ studentService.likeName("小明2").size() > 0, studentService.likeName("坏").size() > 0, studentService.likeName("莉莉").size() > 0 }, new Object[]{ true, false, true } ); // assertTrue(studentService.likeName("小明2").size() > 0); } }
2. JUnit の基本的なアノテーションの紹介
JUnit には、テスト コードを呼び出す役割を担うランナーが多数あります。テストコードを実行するためのさまざまなランナー。
通常の Java テストを実行するだけで Spring Web プロジェクトが関与しない場合は、@RunWith アノテーションを省略して、システムが自動的にデフォルトの Runner を使用してコードを実行するようにすることができます。
3. パラメータ化されたテスト
Junit が提供するパラメータ化されたテストは @RunWith(Parameterized.class) を使用する必要があります
ただし、Junit は @RunWith を使用して Runner を指定するため、多くの場合 @ RunWith を使用する必要があります。 (SpringJUnit4ClassRunner.class) を使用して Spring エンジニアリング メソッドをテストするため、assertArrayEquals を使用してメソッドを複数の可能性についてテストできます。
以下はパラメータ化されたテストの簡単な例です://在所有测试方法前执行一次,一般在其中写上整体初始化的代码 @BeforeClass //在所有测试方法后执行一次,一般在其中写上销毁和释放资源的代码 @AfterClass //在每个测试方法前执行,一般用来初始化方法(比如我们在测试别的方法时,类中与其他测试方法共享的值已经被改变,为了保证测试结果的有效性,我们会在@Before注解的方法中重置数据) @Before //在每个测试方法后执行,在方法执行完成后要做的事情 @After // 测试方法执行超过1000毫秒后算超时,测试将失败 @Test(timeout = 1000) // 测试方法期望得到的异常类,如果方法执行没有抛出指定的异常,则测试失败 @Test(expected = Exception.class) // 执行测试时将忽略掉此方法,如果用于修饰类,则忽略整个类 @Ignore(“not ready yet”) @Test @RunWith
4. パッケージ化されたテスト
通常、5 つのテスト クラスを作成し、それらを 1 つずつ実行する必要があります。
テストのパッケージ化とは、新しいクラスを追加し、一緒に作成した他のテスト クラスを構成し、このクラスを直接実行して、他のいくつかのテストを同時に実行するという目的を達成することを意味します。
コードは次のとおりです:package org.springboot.sample; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class ParameterTest { private String name; private boolean result; /** * 该构造方法的参数与下面@Parameters注解的方法中的Object数组中值的顺序对应 * @param name * @param result */ public ParameterTest(String name, boolean result) { super(); this.name = name; this.result = result; } @Test public void test() { assertTrue(name.contains("小") == result); } /** * 该方法返回Collection * * @return * @author SHANHY * @create 2016年2月26日 */ @Parameters public static Collection<?> data(){ // Object 数组中值的顺序注意要和上面的构造方法ParameterTest的参数对应 return Arrays.asList(new Object[][]{ {"小明2", true}, {"坏", false}, {"莉莉", false}, }); } }
5. Junitを使用してHTTP APIインターフェイスをテストします
内部単体テスト要件が満たされていない場合は、これを直接使用できます。非常に厳密です。外部 API は完全にテストできることを保証します。API は多くの内部メソッドを呼び出すため、統合テストとして考えてみましょう。
以下は簡単な例です:
@RunWith(Suite.class) @SuiteClasses({ATest.class, BTest.class, CTest.class}) public class ABCSuite { // 类中不需要编写代码 }
6. 出力をキャプチャします
以上がSpring Boot Junit 単体テストの導入と使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。