You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python单元测试:如何将func.py主函数中run参数的维度传入测试脚本

如何在Python单元测试中获取并验证主函数输出的维度

嘿,作为Python单元测试新手,我完全理解你想验证输出维度的需求——这其实是单元测试里非常常见的场景,尤其是处理数据或模型输出的时候。下面是几种实用的方法,帮你把func.py里主函数的run['l_modeloutputs']和run['l_dataoutputs']的维度拿到测试脚本里验证:

方法1:直接调用主函数获取run字典

如果你的主函数可以独立运行(不需要复杂的外部依赖,比如读特定文件、调用第三方API),这是最直接的方式。你只需要在测试脚本里导入主函数,执行它拿到完整的run字典,再提取需要的字段验证维度即可。

举个例子:
假设func.py里的主函数是这样的:

# func.py
def main():
    # 这里是你的业务逻辑,最终生成run字典
    run = {
        'l_modeloutputs': your_model_output_array,
        'l_dataoutputs': your_data_output_array
    }
    return run

那测试脚本(比如命名为test_func.py)可以这么写:

import unittest
from func import main

class TestOutputDimensions(unittest.TestCase):
    def test_output_dimensions_match_expected(self):
        # 调用主函数拿到run字典
        run_result = main()
        
        # 提取需要验证的输出
        model_output = run_result['l_modeloutputs']
        data_output = run_result['l_dataoutputs']
        
        # 验证维度是否符合预期,比如假设期望是(100, 20)和(100, 10)
        self.assertEqual(model_output.shape, (100, 20))
        self.assertEqual(data_output.shape, (100, 10))

if __name__ == '__main__':
    unittest.main()

小贴士:如果主函数需要输入参数,记得传入测试专用的模拟参数,这样能保证每次测试的输入稳定,输出也可预测。

方法2:拆分主函数,隔离可测试的逻辑

如果你的主函数很复杂,包含很多外部依赖(比如读取数据库、调用外部服务),直接调用会让测试变得不稳定。这时候建议把生成l_modeloutputs和l_dataoutputs的核心逻辑拆成独立的小函数,这样测试时可以直接针对这些小函数验证,不用跑完整的主流程。

比如重构func.py:

# func.py
def generate_model_outputs(input_data):
    # 这里只放生成l_modeloutputs的核心逻辑
    return model_outputs

def generate_data_outputs(input_data):
    # 这里只放生成l_dataoutputs的核心逻辑
    return data_outputs

def main():
    # 处理外部依赖的部分(比如读文件、调API)
    input_data = load_external_input()
    
    # 调用拆分后的函数生成输出
    model_outputs = generate_model_outputs(input_data)
    data_outputs = generate_data_outputs(input_data)
    
    run = {
        'l_modeloutputs': model_outputs,
        'l_dataoutputs': data_outputs
    }
    return run

然后测试脚本就可以直接测试拆分后的函数:

import unittest
from func import generate_model_outputs, generate_data_outputs

class TestOutputDimensions(unittest.TestCase):
    def test_model_output_dimension(self):
        # 构造测试用的输入数据
        test_input = ...  # 比如numpy数组、列表等适合测试的输入
        model_output = generate_model_outputs(test_input)
        self.assertEqual(model_output.shape, (你的期望维度))
    
    def test_data_output_dimension(self):
        test_input = ...
        data_output = generate_data_outputs(test_input)
        self.assertEqual(data_output.shape, (你的期望维度))

if __name__ == '__main__':
    unittest.main()

这种方式的好处是测试更聚焦,只验证核心逻辑的输出维度,不受外部依赖的影响。

方法3:用Mock处理外部依赖

如果必须保留主函数的完整流程,但它依赖一些不可控的外部资源(比如数据库、付费API),可以用Python标准库的unittest.mock来模拟这些依赖,让主函数能在测试环境里正常运行,返回我们需要的run字典。

举个例子:假设func.py的main()需要调用load_external_data()获取输入,我们可以mock这个函数:

import unittest
from unittest.mock import patch
from func import main

class TestOutputDimensions(unittest.TestCase):
    @patch('func.load_external_data')
    def test_output_dimensions_with_mocked_dependency(self, mock_load_data):
        # 设置mock函数返回的测试输入
        mock_load_data.return_value = 你的模拟输入数据
        
        # 调用主函数,此时它会用mock的输入生成run字典
        run_result = main()
        
        # 验证维度
        self.assertEqual(run_result['l_modeloutputs'].shape, (期望维度))
        self.assertEqual(run_result['l_dataoutputs'].shape, (期望维度))

if __name__ == '__main__':
    unittest.main()

Mock的作用是帮你隔离外部依赖,让测试只关注你关心的输出维度是否正确,不用关心外部资源的状态。


内容的提问来源于stack exchange,提问作者Enzo Bruckmamaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:04:19