【单元测试】

一、框架

不同的编程语言有不同的测试框架,以下是一些常见的测试框架:

python 复制代码
1)Java:JUnit、TestNG

2)Python:unittest、pytest

3)JavaScript:Jest、Mocha

4)C#:NUnit、xUnit

5)C++:Google Test

二、编写单元测试的步骤

1、确定测试目标

首先,明确你要测试的函数或方法的功能。例如,一个函数的目的是计算两个数的和,那么测试目标就是验证这个函数在各种输入下都能正确返回结果。

2、编写测试用例

  • 正常输入:测试函数在正常输入下的行为。例如,对于加法函数,输入两个正数、两个负数、一个正数一个负数等。

  • 边界输入:测试函数在边界条件下的行为。例如,输入最大值、最小值、零等。

  • 异常输入:测试函数在异常输入下的行为。例如,输入非法类型(如字符串代替数字)、空值等。

  • 特殊输入:测试函数在特殊条件下的行为。例如,输入两个相同的数、输入两个相反数等。

3、编写测试代码(用例开发)

  • 使用测试框架提供的语法和功能编写测试代码。以下是2个简单的例子:
1)示例:Python 中的单元测试

假设有一个函数 add,用于计算两个数的和:

Python复制

复制代码
def add(a, b):
    return a + b

使用 unittest 框架编写单元测试:

Python复制

python 复制代码
import unittest

class TestAddFunction(unittest.TestCase):
    def test_add_positive_numbers(self):
        self.assertEqual(add(2, 3), 5)

    def test_add_negative_numbers(self):
        self.assertEqual(add(-1, -1), -2)

    def test_add_zero(self):
        self.assertEqual(add(0, 0), 0)

    def test_add_mixed_numbers(self):
        self.assertEqual(add(-1, 1), 0)

    def test_add_with_non_numeric_input(self):
        with self.assertRaises(TypeError):
            add("a", 1)

if __name__ == '__main__':
    unittest.main()
2)示例:Java 中的单元测试

假设有一个类 Calculator,其中有一个方法 add

java复制

复制代码
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

使用 JUnit 框架编写单元测试:

java复制

java 复制代码
import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CalculatorTest {
    @Test
    public void testAddPositiveNumbers() {
        assertEquals(5, new Calculator().add(2, 3));
    }

    @Test
    public void testAddNegativeNumbers() {
        assertEquals(-2, new Calculator().add(-1, -1));
    }

    @Test
    public void testAddZero() {
        assertEquals(0, new Calculator().add(0, 0));
    }

    @Test
    public void testAddMixedNumbers() {
        assertEquals(0, new Calculator().add(-1, 1));
    }
}

三、运行单元测试

  • 运行测试 :使用测试框架提供的工具运行测试。例如,在 Python 中可以运行 unittest.main(),在 Java 中可以使用 IDE 的测试运行功能。

  • 检查结果:确保所有测试用例都通过。如果有测试失败,需要检查代码并修复问题。

四、维护单元测试

  • 更新测试用例:当代码发生变化时,需要更新测试用例以确保测试的完整性。

  • 持续集成:将单元测试集成到持续集成(CI)流程中,确保每次代码提交都能自动运行测试。

五、最佳实践(单测的应用)

  1. 测试覆盖率 :尽量提高测试覆盖率,确保代码的每个分支和逻辑都被测试到。

  2. 独立性:每个测试用例应该是独立的,不依赖于其他测试用例。

  3. 可读性:测试代码应该清晰易懂,便于维护。

  4. 自动化 :将单元测试集成到自动化测试流程中,确保每次代码提交都能自动运行测试。

相关推荐
devmoon8 小时前
Polkadot SDK Pallet 单元测试完整指南:从基础到实战
单元测试·web3·区块链·模块测试·polkadot
devmoon9 小时前
为 Pallet 搭建最小化 Mock Runtime 并编写单元测试环境
开发语言·单元测试·区块链·智能合约·polkadot
软件检测小牛玛1 天前
软件功能测试找谁做?第三方软件检测机构推荐:中承信安
功能测试·单元测试·软件测试报告·软件功能测试·第三方软件测评
软件检测小牛玛3 天前
具备软件功能测试资质的机构哪家更权威?山东软件测评机构 中承信安
功能测试·单元测试·软件测试报告·软件测评机构
闻哥3 天前
从测试坏味道到优雅实践:打造高质量单元测试
java·面试·单元测试·log4j·springboot
Warren983 天前
Pytest Fixture 作用域与接口测试 Token 污染问题实战解析
功能测试·面试·单元测试·集成测试·pytest·postman·模块测试
知行合一。。。3 天前
程序中的log4j、stderr、stdout日志
python·单元测试·log4j
测试秃头怪4 天前
面试大厂就靠这份软件测试八股文了【含答案】
自动化测试·软件测试·python·功能测试·面试·职场和发展·单元测试
测试大圣4 天前
软件测试基础知识总结(超全的)
软件测试·python·功能测试·测试工具·职场和发展·单元测试·测试用例