テスト
1つは、テスト分類です。
詳細な分類をテストします。
- 機能と組み合わせて、特定の実行中のコードをテストするホワイトボックス。
- テスターはブラックボックステストを使用します。インターフェイスから、機能が要件を満たしているかどうかを確認するには、ドキュメントを作成し、すべての詳細を記録する必要があります。
- クロステストは、開発者が開発するときに、互いの機能をテストします。
機能テスト:
1。ホワイトボックスとブラックボックスを含む
2.テストデータの準備
3.マルチ環境テスト:(テスト環境(ローカルエリアネットワークデータ)、プレリリース環境(外部ネットワークデータ)、正式な環境)
- 同じオペレーティングシステム、同じバージョン、同じソフトウェア環境(実行環境、コード、jdk、tomcat、mysql ...)
- データベースデータが異なります(プレリリース環境のデータは通常、最新の公式環境のデータです)
自動テスト
ツールを使用して製品をテストします。
主に高い同時実行シナリオをシミュレートするためのパフォーマンステスト(jmeter)、ストレステスト、応答速度
テストレポートを作成します。
それぞれの特定のビジネスプロセス、スクリーンショット、特定の時間、バグがある場所、エラー、および失敗が記録されます。
バグ追跡システムは
、バグ、現在のバグの数、現在のバグが解決されるまでにかかる時間などを記録および追跡するために使用されます。これは、サードパーティまたは会社自体によるそのようなシステムのセットです。
バグデータを統計、分析、解決します。
第二に、ユニットテストJunit、junitは@Testアノテーション、浅いだけだと思いますか...
利点:
利点:junitには、junitケースとjunitスイートが含まれます。一度に複数のメソッドまたは複数のユニットテストクラスをテストし、期待される結果を設定することができます。実行の結果は、実行されたメソッドの数、実行されたエラー、および失敗をテストすることです。
仕様:
1.テストメソッドは@Testで装飾する必要があります
2.テストメソッドはパラメータなしでpublicvoidで装飾する必要があります
3.テストコードを格納するための新しいソースコードディレクトリを作成します
4.テストクラスのパッケージはテスト済みクラスと同じである必要があります一貫性を保つ
5.テストユニット内の各メソッドは個別にテストする必要があり、テストメソッド間に依存関係はありません。6。
テストクラスはクラスのサフィックスとしてTestを使用します
。7。テストメソッドはメソッド名のプレフィックスとしてtestを使用します。
断言:
テスト結果は、設定の期待される結果と比較されます。
断言
//查看两个数组是否相等。
assertArrayEquals(expecteds, actuals)
//查看两个对象是否相等。类似于字符串比较使用的equals()方法
assertEquals(expected, actual)
//查看两个对象是否不相等。
assertNotEquals(first, second)
//查看对象是否为空。
assertNull(object)
//查看对象是否不为空。
assertNotNull(object)
//查看两个对象的引用是否相等。类似于使用“==”比较两个对象
assertSame(expected, actual)
//查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象
assertNotSame(unexpected, actual)
//查看运行结果是否为true。
assertTrue(condition)
//查看运行结果是否为false。
assertFalse(condition)
//查看实际值是否满足指定的条件
assertThat(actual, matcher)
fail() 让测试失败
ケースデモ:
junitテストケーステストクラスの作成、テストの実行、結果のフィードバック
ここでeclipse、java8を使用します
- 新しい通常のJavaeeプロジェクトを作成し、junitテストパッケージをインポートして、パスをビルドします
- インポート
デモ、合計、分割の作成を開始します
package cn.bitqian.demo;
/**
* @author echo lovely
* @date 2020年11月13日 下午6:55:22
*/
public class MyMath {
// sum
public int add(int a, int b) {
return a + b;
}
// divide
public int division(int a, int b) {
if (b == 0)
return b;
return a / b;
}
}
junitテストクラスを作成します。パッケージ名はsrcの下のものと同じで、クラス名は元のクラス名+ Testにあり
ます。次のステップ
package cn.bitqian.demo;
// 静态导入类,可直接用里面的静态方法
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* junit test class
* @author echo lovely
* @date 2020年11月13日 下午6:59:03
*/
public class MyMathTest {
private MyMath math = new MyMath();
/**
* 1. 测试方法 无参无返
* 2. 方法前面加上@Test注解
*
* 运行测试方法,选中方法,右键run as Junit test 或者 debug as Junit test
* 直接右键,会运行所有有@Test注解的方法
* Runs 测试了几个方法
* Errors 测试方法有问题
* Failures 测试方法没达到预期的要求
*/
// 类加载时执行
@BeforeClass
public static void beforeClass() {
System.out.println("init...");
}
// 每个有@Test方法执行前执行
@Before
public void before() {
// 如获取mybatis的session工厂
System.out.println("method before...");
}
// 每个方法执行之后执行
@After
public void after() {
// 如关闭mybatis的session工厂
System.out.println("method after...");
}
// 类所有的方法执行完后执行
@AfterClass
public static void afterClass() {
System.out.println("all is done...");
}
// 1秒 内必须出结果,否则测试失败
@Test(timeout=1000)
public void testAdd() {
System.out.println("测试了math类的加法");
// 预测值
int expected = 2 + 3;
// 实际值
int actual = math.add(2, 3);
// 断言
Assert.assertEquals(expected, actual);
}
@Test
public void testDivision() {
System.out.println("测试了math类的除法");
// Errors
int expected = 5 / 0;
int actual = math.division(5, 2);
assertEquals(expected, actual);
}
}
右クリックしてテスト
コンソールを実行します
junitテストスイートドールテスト、スイートスイート、スイートスイートケース
これにより、一度により多くのメソッドをテストできます。
構造
package cn.bitqian.suite;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import cn.bitqian.demo.MyMathTest;
/**
* suite 测试套件 套娃
* 测试套件就是组织测试类一起运行
* 写一个测试套件的入口类,这个类不包含其他的方法
* @author echo lovely
* @date 2020年11月13日 下午7:16:57
*/
// 运行器
@RunWith(Suite.class)
// 哪些测试类要包含, 会运行对应类的内容
@SuiteClasses({
MyMathTest.class})
public class MyMathTestSuite {
}
package cn.bitqian.suite;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import cn.bitqian.demo.MyMathTest2;
/**
* 测试套件2 套测试类 MyMathTest2
* @author echo lovely
* @date 2020年11月13日 下午7:16:57
*/
@RunWith(Suite.class)
@SuiteClasses({
MyMathTest2.class})
public class MyMathTestSuite2 {
}
package cn.bitqian.suite;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
/**
* 总套件,套娃,套两个Suite
* @author echo lovely
* @date 2020年11月13日 下午7:24:08
*/
@RunWith(Suite.class)
@SuiteClasses({
MyMathTestSuite.class, MyMathTestSuite2.class })
public class AllTests {
}
AllTestsを実行する
パラメータと結果が競合する場合は、特定の方法をテストしてください
package cn.bitqian.demo;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
* 测试MyMath类中的add方法
* @author echo lovely
* @date 2020年11月13日 下午8:08:17
*/
@RunWith(Parameterized.class)
public class MyMathAddTest {
// 预期值
int excepted = 0;
// 参数1
int input1 = 0;
// 参数2
int input2 = 0;
public MyMathAddTest(int excepted, int input1, int input2) {
super();
this.excepted = excepted;
this.input1 = input1;
this.input2 = input2;
}
@Parameters
public static Collection<Object[]> t(){
return Arrays.asList(new Object[][]{
{
4,2,2},
{
11,9,2},
{
8,6,2},
{
1,-6,7}
// res v1 v2
});
}
@Test
public void testAdd(){
MyMath myMath = new MyMath();
Assert.assertEquals(this.excepted,myMath.add(this.input1, this.input2));
}
}