python测试代码(三)
当然,以下是一些具体的Python测试代码示例,涵盖了单元测试、集成测试、模拟对象的使用,以及测试覆盖率的分析。
单元测试示例
python复制代码
|
# 被测试的代码:一个简单的计算器类 |
|
class Calculator: |
|
def add(self, a, b): |
|
return a + b |
|
|
|
def subtract(self, a, b): |
|
return a - b |
|
|
|
# 单元测试代码 |
|
import unittest |
|
|
|
class TestCalculator(unittest.TestCase): |
|
def setUp(self): |
|
self.calculator = Calculator() |
|
|
|
def test_add(self): |
|
result = self.calculator.add(2, 3) |
|
self.assertEqual(result, 5) |
|
|
|
def test_subtract(self): |
|
result = self.calculator.subtract(5, 2) |
|
self.assertEqual(result, 3) |
|
|
|
def tearDown(self): |
|
del self.calculator |
|
|
|
if __name__ == '__main__': |
|
unittest.main() |
集成测试示例
python复制代码
|
# 假设我们有两个模块,一个提供数据,另一个处理数据 |
|
# data_provider.py |
|
def get_data(): |
|
return [1, 2, 3, 4, 5] |
|
|
|
# data_processor.py |
|
def process_data(data): |
|
return sum(data) |
|
|
|
# 集成测试代码 |
|
import unittest |
|
from data_provider import get_data |
|
from data_processor import process_data |
|
|
|
class TestIntegration(unittest.TestCase): |
|
def test_data_processing(self): |
|
data = get_data() |
|
result = process_data(data) |
|
self.assertEqual(result, 15) |
|
|
|
if __name__ == '__main__': |
|
unittest.main() |
使用模拟对象进行单元测试
python复制代码
|
# 被测试的代码:一个使用外部API的类 |
|
import requests |
|
|
|
class ExternalAPIClient: |
|
def get_data(self, url): |
|
response = requests.get(url) |
|
return response.json() |
|
|
|
# 测试代码,使用模拟对象模拟requests库的行为 |
|
import unittest |
|
from unittest.mock import Mock, patch |
|
|
|
class TestExternalAPIClient(unittest.TestCase): |
|
@patch('requests.get') |
|
def test_get_data(self, mock_get): |
|
mock_response = Mock() |
|
mock_response.json.return_value = {'data': 'test_data'} |
|
mock_get.return_value = mock_response |
|
|
|
client = ExternalAPIClient() |
|
result = client.get_data('http://example.com') |
|
|
|
self.assertEqual(result, {'data': 'test_data'}) |
|
mock_get.assert_called_once_with('http://example.com') |
|
|
|
if __name__ == '__main__': |
|
unittest.main() |
测试覆盖率分析
为了分析测试覆盖率,你需要安装coverage库。你可以使用pip来安装它:
bash复制代码
|
pip install coverage |
然后,你可以使用以下命令来运行你的测试并生成覆盖率报告:
bash复制代码
|
coverage run -m unittest discover |
|
coverage report -m |
coverage run命令会运行你的测试,并收集覆盖率数据。coverage report命令会生成一个报告,显示哪些代码行被测试覆盖了,哪些没有。-m选项会让报告输出更详细的信息,包括每个文件的具体覆盖率百分比。
这些示例展示了如何在Python中编写和运行不同类型的测试,并使用模拟对象和测试覆盖率工具来增强测试的效果和可靠性。在实际项目中,你可能还需要考虑使用像pytest这样的更强大的测试框架,以及持续集成工具来自动化测试过程。
通过结合这些不同类型的测试,你可以构建一个全面、健壮的测试套件,从而确保你的Python代码在各种情况下都能正常工作。