第34节:unittest断言

本文详细介绍了unittest中的各种断言方法,包括基础断言如assertEqual、assertNotEqual等,以及复杂断言如assertListEqual、assertTupleEqual等,并提供了丰富的示例帮助理解。

unittest断言

在测试用例中,执行完测试用例后,最后一步是判断测试结果是pass还是fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert)
基础断言:
Method Checks that
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)
assertAlmostEqual(a, b) a,b在规定的小数位是否约等于
assertNotAlmostEqual(a, b) a,b在规定的小数位是否不约等于
assertGreater(a, b) a > b
assertGreaterEqual(a, b) a >= b
assertLess(a, b) a < b
assertLessEqual(a, b) a <= b
assertRegexpMatches(s, r) r.search(s)
assertNotRegexpMatches(s, r) not r.search(s)
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs

实例如下:


复杂断言:

序号 断言方法 断言描述
1 assertListEqual (list1, list2, msg = None) 验证列表list1、list2相等,不等则fail,同时报错信息返回具体的不同的地方
2 assertTupleEqual (tuple1, tuple2, msg = None) 验证元组tuple1、tuple2相等,不等则fail,同时报错信息返回具体的不同的地方
3 assertSetEqual (set1, set2, msg = None) 验证集合set1、set2相等,不等则fail,同时报错信息返回具体的不同的地方
4 assertDictEqual (expected, actual, msg = None) 验证字典expected、actual相等,不等则fail,同时报错信息返回具体的不同的地方
举例如下:



请作为资深开发工程师,解释我给出的代码。请逐行分析我的代码并给出你对这段代码的理解。 我给出的代码是: import os import sys import unittest from sklearn.metrics import roc_auc_score from pyod.models.auto_encoder import AutoEncoder from pyod.utils.data import generate_data class TestAutoEncoder(unittest.TestCase): def assertHasAttr(self, obj, intended_attr): self.assertTrue(hasattr(obj, intended_attr)) def assertInRange(self, data, lower, upper): self.assertGreaterEqual(data.min(), lower) self.assertLessEqual(data.max(), upper) def setUp(self): self.n_train = 6000 self.n_test = 1000 self.n_features = 300 self.contamination = 0.1 self.roc_floor = 0.8 self.X_train, self.X_test, self.y_train, self.y_test = generate_data( n_train=self.n_train, n_test=self.n_test, n_features=self.n_features, contamination=self.contamination, random_state=42) self.clf = AutoEncoder(epoch_num=5, contamination=self.contamination) self.clf.fit(self.X_train) def test_parameters(self): self.assertHasAttr(self.clf, ‘decision_scores_’) self.assertIsNotNone(self.clf.decision_scores_) self.assertHasAttr(self.clf, ‘labels_’) self.assertIsNotNone(self.clf.labels_) self.assertHasAttr(self.clf, ‘threshold_’) self.assertIsNotNone(self.clf.threshold_) self.assertHasAttr(self.clf, ‘_mu’) self.assertIsNotNone(self.clf._mu) self.assertHasAttr(self.clf, ‘_sigma’) self.assertIsNotNone(self.clf.sigma) self.assertHasAttr(self.clf, ‘model’) self.assertIsNotNone(self.clf.model) def test_train_scores(self): self.assertEqual(len(self.clf.decision_scores), self.X_train.shape[0] def test_prediction_scores(self): pred_scores = self.clf.decision_function(self.X_test) self.assertEqual(pred_scores.shape[0], self.X_test.shape[0]) self.assertGreaterEqual(roc_auc_score(self.y_test, pred_scores), self.roc_floor) def test_prediction_labels(self): pred_labels = self.clf.predict(self.X_test) self.assertEqual(pred_labels.shape, self.y_test.shape) if name == ‘main’: unittest.main()
最新发布
03-17
好的,下面是对您提供的代码的逐行分析以及对该段代码的整体理解: --- ### **代码逐行解析** ```python import os import sys import unittest ``` **第1-3行**: 导入了 `os` 和 `sys` 模块用于操作系统的交互和系统级别的功能(尽管在这个例子中未直接使用),导入了 `unittest` 单元测试框架。 ```python from sklearn.metrics import roc_auc_score ``` **第4行**: 从 Scikit-Learn 的评估模块中引入 ROC AUC 分数函数 (`roc_auc_score`),用于评估模型预测性能。 ```python from pyod.models.auto_encoder import AutoEncoder from pyod.utils.data import generate_data ``` **第5-6行**: - 第5行:从 PyOD 库中的 `auto_encoder` 子模块引入自动编码器 (AutoEncoder) 异常检测算法。 - 第6行:从 PyOD 工具包中引入数据生成工具 `generate_data()` 函数,用于创建训练集、测试集及对应的标签。 ```python class TestAutoEncoder(unittest.TestCase): ``` **第7行**: 定义了一个基于单元测试框架 `unittest` 的类 `TestAutoEncoder`,该类将包含若干针对 AutoEncoder 算法的功能测试用例。 ```python def assertHasAttr(self, obj, intended_attr): self.assertTrue(hasattr(obj, intended_attr)) ``` **第8-9行**: 自定义断言方法 `assertHasAttr`,检查某个对象是否有指定属性,并通过 `assertTrue` 断言结果是否为真。 ```python def assertInRange(self, data, lower, upper): self.assertGreaterEqual(data.min(), lower) self.assertLessEqual(data.max(), upper) ``` **第10-12行**: 自定义断言方法 `assertInRange`,验证数据的所有值是否落在 `[lower, upper]` 区间内。 ```python def setUp(self): self.n_train = 6000 self.n_test = 1000 self.n_features = 300 self.contamination = 0.1 self.roc_floor = 0.8 self.X_train, self.X_test, self.y_train, self.y_test = generate_data( n_train=self.n_train, n_test=self.n_test, n_features=self.n_features, contamination=self.contamination, random_state=42) self.clf = AutoEncoder(epoch_num=5, contamination=self.contamination) self.clf.fit(self.X_train) ``` **第13-22行**: - 设置单元测试前的基础环境 (`setUp` 方法),初始化所有必要的变量和数据。 - 创建训练集 (`X_train`, `y_train`) 和测试集 (`X_test`, `y_test`) 并设定其大小、特征维度和污染比例 (`contamination`)。 - 初始化并拟合 AutoEncoder 异常检测模型实例 (`clf`) 到训练数据上。 ```python def test_parameters(self): self.assertHasAttr(self.clf, 'decision_scores_') self.assertIsNotNone(self.clf.decision_scores_) # 其他类似断言语句... ``` **第23-28行**: 测试 AutoEncoder 是否成功设置了关键内部属性,例如决策分数、阈值等,并确保它们是空值或 None 类型。 ```python def test_train_scores(self): self.assertEqual(len(self.clf.decision_scores_), self.X_train.shape[0]) ``` **第29-30行**: 验证训练后的异常评分长度是否等于训练样本的数量。 ```python def test_prediction_scores(self): pred_scores = self.clf.decision_function(self.X_test) self.assertEqual(pred_scores.shape[0], self.X_test.shape[0]) self.assertGreaterEqual(roc_auc_score(self.y_test, pred_scores), self.roc_floor) ``` **第31-34行**: 测试模型在测试集上的预测能力,包括验证预测分数形状一致性以及确认模型的表现是否优于给定基准线(ROC_AUC > 0.8)。 ```python def test_prediction_labels(self): pred_labels = self.clf.predict(self.X_test) self.assertEqual(pred_labels.shape, self.y_test.shape) ``` **第35-37行**: 测试模型在测试集上的分类标签预测结果尺寸是否正确。 ```python if __name__ == '__main__': unittest.main() ``` **最后两行**: 如果脚本被独立运行,则启动单元测试主程序。 --- ### **整体代码理解** 此代码片段是一个完整的单元测试脚本,专门设计用于检验 PyOD 中的 AutoEncoder 异常检测算法的行为及其核心特性。它涵盖了以下几个方面: 1. 数据准备阶段:利用 `generate_data` 自动生成带噪声的数据; 2. 模型构建与训练:配置 AutoEncoder 参数并通过 `.fit()` 进行训练; 3. 功能性测试:逐一验证模型的各种重要属性是否存在且合法; 4. 性能评测:结合实际业务需求设置最低标准,如 ROC_AUC 值低于特定门槛; 5. 推理验证:分别对得分与标签输出实施全面校验。 整个流程清晰严谨地保证了模型实现的质量可靠性和稳定性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值