繁体   English   中英

如何在通过 python 进行单元测试时增加覆盖率

[英]How to increase the coverage while doing unit test via python

我对 python 中的单元测试和覆盖率非常陌生……这是我正在做某事的代码。

import datetime
import json
import sys
import traceback
import uuid
import requests
from src.utils.RecoObjUtils import generate_recommendation
from src.utils.logger import logger, log
from src.utils.task import Task
from src.utils.jsonAdapter import JsonAdapter


class CaseSeriousnessCodingTask(Task):
    @logger(level='INFO')
    def run_task(self, env_data):
        """Task to call Case Seriousness coding service"""
        #print("env_data------",env_data)
        self.ro = JsonAdapter()
        self.ro.content = env_data

        # List of seriousness fields
        seriousness_fields = [
            'seriousness_criteria_death',
            'seriousness_criteria_other',
            'seriousness_criteria_disabling',
            'seriousness_criteria_hospitalization',
            'seriousness_criteria_congenital_anomaly',
            'seriousness_criteria_intervention_required'

        ]
        # Get all reactions and check if any seriousness criteria is set to True
        seriousness_conditions = []

        # Get the value for each seriousness field and append it to a list
        for seriousness_field in seriousness_fields:
            seriousness_conditions.append(
                self.ro.get(f'data_obj.case_reco_obj.safety_report.reaction[*].{seriousness_field}.recommendations[*].display_text')
            )

        # Check if any of these fields has True as the value, then set the seriousness as True
        if True in [val for sublist in seriousness_conditions for val in sublist]: #Flatten list of lists
            # Set case serious = True for this path:  data.data_obj.case_reco_obj.safety_report.fulfill_expedite_criteria #TODO - Is this still required?
            self.ro.set('data_obj.case_reco_obj.safety_report.case_details.case_serious.recommendations[0].display_text',True)
        else:
            self.ro.set('data_obj.case_reco_obj.safety_report.case_details.case_serious.recommendations[0].display_text', False)

        return self.ro.get(), None```


Now here is test_case written script;

单元测试

导入 json 导入 unittest 从 src.tasks.CaseSeriousnessCodingTask 导入响应导入 CaseSeriousnessCodingTask 导入操作系统

class test_CaseSeriousnessTask(unittest.TestCase):

# Initalization
@classmethod
def setUpClass(self):
    self.task = CaseSeriousnessCodingTask()
    with open('src/tests/input/CaseSeriousnessCodingTask.json') as json_file:
        self.input = json.load(json_file)

def test_task(self):
    output,error = self.task.run_task(self.input)
    self.assertIsNone(error)
    #self.assertIsNone(output['data_obj']['case_reco_obj']['safety_report']['case_serious']['recommendations'][0]['display_text'])
    self.assertIsNotNone(self.task.run_task(self.input))
    self.assertFalse(output['data_obj']['case_reco_obj']['safety_report']['case_serious']['recommendations'][0]['display_text'])
# Tear down for every step
def tearDown(self):
    pass```

但我得到的覆盖率只有 57%。 我尝试了很多事情来增加。 请让我知道如何增加它。 我希望有人能帮帮忙。

这是我的报道片段:

覆盖 html

覆盖 html

我不确定您的 function run_task 到底想做什么,但我认为它会运行一组任务。 您可以尝试为您的 function 编写负面测试用例,这反过来会增加您的测试用例覆盖率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM