Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于真值表值创建测试用例?_Python_Io_Logic_Itertools_Spacy - Fatal编程技术网

Python 如何基于真值表值创建测试用例?

Python 如何基于真值表值创建测试用例?,python,io,logic,itertools,spacy,Python,Io,Logic,Itertools,Spacy,我正在从spaCy文档中的令牌创建输出。使用真值表,我需要输出所有可能的场景进行测试。输入的数量因输入而异。如果可能的话,我希望它能够灵活地以这种方式进行3+输入:((a和b)或c) 每个场景的输入都有一个正(真)或负(假)方面(即设置输入或未设置输入),因为必须检查所有可能的情况。 对于2输入场景,以下结果是目标: 输入:当“输入1已设置”或“输入2不可用”时,则“检测到故障” 输出: 案例1: 设置输入1 输入2不可用 检测到故障 案例2: 未设置输入1 输入2不可用 检测到故障 案

我正在从spaCy文档中的令牌创建输出。使用真值表,我需要输出所有可能的场景进行测试。输入的数量因输入而异。如果可能的话,我希望它能够灵活地以这种方式进行3+输入:((a和b)或c)

每个场景的输入都有一个正(真)或负(假)方面(即设置输入或未设置输入),因为必须检查所有可能的情况。 对于2输入场景,以下结果是目标:

输入:当“输入1已设置”或“输入2不可用”时,则“检测到故障”

输出:

  • 案例1:

    • 设置输入1
    • 输入2不可用
    • 检测到故障
  • 案例2:

    • 未设置输入1
    • 输入2不可用
    • 检测到故障
  • 案例3:

    • 设置输入1
    • 输入2可用
    • 检测到故障
  • 案例4:

    • 未设置输入1
    • 输入2可用
    • 未检测到故障
  • 对于3个或更多输入,它将以指数方式增加

    我可以将数组或列表中的字符串值格式化/提取为输出的正确格式。我的主要问题是通过n个输入和混合逻辑类型进行迭代

    def truth_table(n):
        table = list(itertools.product([False, True], repeat=n))
        print(table)
    truth_table(3)
    
    这对我不起作用,因为它只处理输入,而不处理结果输出

    我考虑过将输入添加为元组,指定值1或0作为其正“版本”或负“版本”的指示器,并将真值表定义为2D列表。然后遍历真值表的每个位置,用指定的输入语句替换0和1值,创建一个新的2D数组

    or_2 = [[0,0,0],
            [0,1,1],
            [1,0,1],
            [1,1,1]]
    
    and_2 = [[0,0,0],
            [0,1,0],
            [1,0,0],
            [1,1,1]]
    
    每个因子的值集(不是“输出”集)是可能值的枚举。在这方面,您的输入似乎非常规范,因为集合包含一个状态词,前面有/没有“not”这个词。这样,就有了集合

    A     {"not set", "set"}
    B     {"not available", "available"}
    out   {"not Detected", "Detected"}
    
    通过分隔符“then”区分输入和输出。您有4个用例,因为
    AxB
    有4个元素

    如果适合您的使用,您可以将这些集合引用为list或dict。我不知道你所说的“x型逻辑”是什么意思;如果要解析逻辑表达式,则需要精确查找该类型的解析器

    在给定的情况下,您需要提取每个子句的信息,并将其包含到第三列“out”的正向生成中。请注意,我假设您的“then”关键字在逻辑上是“iff”

    输出(表的值):

    有了更多的输入和更多的逻辑操作,您将需要转向解析机制并构建这些二进制操作的树


    这会让您有所行动吗?

    您需要为每个测试因子描述您的输出集。然后在这些集合上使用
    itertools.product
    ,生成所有组合。谢谢您的评论。我知道您将如何使用它,但我不清楚如何描述我的输出集。它似乎不包括结果,所以我不知道如何做。是的,这让我的车轮转动,非常感谢。当我尝试重新创建您的代码时,for循环中出现ValueError。“没有足够的值来解包,应为2,得到1”。我不明白为什么。那是因为我在代码中插入了一个额外的容器(括号)。参见新代码;还有其他几个错误。根据您的编辑,我能够找出这个示例。非常感谢你。这很有道理。我不太熟悉用Python构建树,所以我必须学习这个主题。但这是一个了不起的帮助!再次感谢。
    state_1 = "set"
    state_2 = "not available"
    op_1 = operator.__or__
    
    table = []
    for in1, in2 in itertools.product(A, B):
        val1 = in1 == state_1
        val2 = in2 == state_2
        table.append([val1, val2, op_1(val1, val2)])
    
    [[False, True, True],
     [False, False, False],
     [True, True, True],
     [True, False, True]]