Teste === Teste de unidade JUnit

Um, classificação de teste

Classificação detalhada do teste:

  1. Caixa branca testando código de execução específico, combinado com funções.
  2. O teste de caixa preta é usado pelos testadores. Na interface, para ver se a função atende aos requisitos, você precisa escrever um documento e registrar todos os detalhes.
  3. Com testes cruzados, os desenvolvedores testam as funções uns dos outros durante o desenvolvimento.

Teste funcional:
1. Incluindo caixa branca e caixa preta
2. Preparar dados de teste
3. Teste multi-ambiente: (ambiente de teste (dados de rede local), ambiente de pré-lançamento (dados de rede externa), ambiente formal)

  1. Mesmo sistema operacional, mesma versão, mesmo ambiente de software (ambiente de execução, código, jdk, tomcat, mysql ...)
  2. Os dados do banco de dados são diferentes (os dados do ambiente de pré-lançamento são geralmente os dados do ambiente oficial mais recente)

Teste automatizado
Use ferramentas para testar produtos.

Teste de desempenho (jmeter), teste de estresse,
velocidade de resposta, principalmente para simular cenários de alta concorrência

Escreva um relatório de
teste.Cada processo de negócio específico, capturas de tela, tempo específico, onde há bugs, quais erros e quais falhas são registrados!

O sistema de rastreamento de bugs é
usado para registrar e rastrear bugs, o número de bugs atuais, quanto tempo leva para os bugs atuais serem resolvidos, etc ... É um conjunto de tal sistema, por um terceiro ou pela própria empresa.

Estatística, analise e resolva os dados do bug.

Em segundo lugar, teste de unidade Junit, você acha que junit é apenas uma anotação @Test, superficial ...

vantagem:

Vantagens: junit inclui junit case e junit suite. Capaz de testar vários métodos ou várias classes de teste de unidade ao mesmo tempo e definir os resultados esperados. O resultado da execução é testar quantos métodos foram executados, quais erros e quais falharam.

especificação:

1. O método de teste deve ser decorado com @Test
2. O método de teste deve ser decorado com public void sem nenhum parâmetro
3. Crie um novo diretório de código-fonte para armazenar o código de teste
4. O pacote da classe de teste deve ser o mesmo da classe testada Mantenha a consistência
5. Cada método na unidade de teste deve ser testado independentemente e não pode haver dependências entre os métodos de teste
6. A classe de teste usa Test como o sufixo da classe
7. O método de teste usa test como o prefixo do nome do método

Afirmação:

O resultado do teste é comparado com o resultado esperado da configuração.

	
断言
//查看两个数组是否相等。
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()	让测试失败

Demonstração do caso:

criação de classe de teste de caso de teste junit, execução de teste, feedback de resultado

Use eclipse, java8 aqui

  1. Crie um novo projeto Java ee comum e importe o pacote de teste junit, caminho de construção
  2. Importar



Comece a escrever demonstrações, somas, divisões

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;
	}

}

Crie uma classe de teste junit, o nome do pacote é o mesmo que sob src e o nome da classe está no nome da classe original + Teste



. A próxima etapa

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);
		
	}

}

Clique com o botão direito para executar o

console de teste

teste de boneca junit test suite, suite suite, case suite

Isso pode testar mais métodos de uma vez.


estrutura

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 {
    
    

}

Execute AllTests
Insira a descrição da imagem aqui

Quando os parâmetros e resultados entrarem em conflito, teste um método específico

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));
	}
	
	

}

Acho que você gosta

Origin blog.csdn.net/qq_44783283/article/details/109682041
Recomendado
Clasificación