从Observation为True时,AssertEqual返回False

时间:2017-08-12 22:22:38

标签: python unit-testing equality sudoku

我正在修改考试,教授给出了一个测试脚本。 问题涉及游戏Sodoku;在本节中,我必须将一行值的所有非零值作为一组返回到Sudoku表(由2D数组表示)。

def get_values_from_row(puzzle, row): 
    rowVal = []
    try:
        for i in puzzle[row]:
            if i != 0:
                rowVal.append(i)
    except IndexError: 
        print('Invalid Row')
    if len(rowVal) == 0: 
        return rowVal
    else: 
        rowVal = set(rowVal) 
        print(rowVal)
        return(rowVal)

这是Sudoku棋盘

sudoku1 = [[5, 3, 4, 6, 7, 8, 9, 1, 2],
       [6, 7, 2, 1, 9, 5, 3, 4, 8],
       [1, 9, 8, 3, 4, 2, 5, 6, 7],
       [8, 5, 9, 7, 6, 1, 4, 2, 3],
       [4, 2, 6, 8, 5, 3, 7, 9, 1],
       [7, 1, 3, 9, 2, 4, 8, 5, 6],
       [9, 6, 1, 5, 3, 7, 2, 8, 4],
       [2, 8, 7, 4, 1, 9, 6, 3, 5],
       [3, 4, 5, 2, 8, 6, 1, 7, 9]]

当我运行第0行的函数时,我按预期得到{1,2,3,4,5,6,7,8,9}。但是,当我运行测试脚本时返回失败。

这是测试脚本中的相关代码:

import unittest


class Test(unittest.TestCase):

    def test_get_values_from_row(self):
        sudoku1 = [
               [5, 3, 4, 0, 7, 8, 9, 1, 2],
               [6, 7, 0, 0, 9, 5, 0, 4, 8],
               [1, 9, 8, 0, 4, 0, 5, 6, 7],
               [8, 5, 9, 7, 6, 1, 4, 2, 3],
               [4, 2, 6, 8, 5, 3, 7, 9, 1],
               [7, 1, 3, 0, 2, 4, 8, 5, 6],
               [9, 6, 1, 5, 3, 7, 2, 8, 4],
               [2, 8, 7, 4, 1, 9, 6, 3, 5],
               [3, 4, 5, 2, 8, 6, 1, 7, 9]]

       self.assertEqual(sg.get_values_from_row(sudoku1, 0), set([6]))

sg正是我正在编辑的脚本导入的内容。当我看到日志显然6不在集合中时,当我将其更改为3时,同样的事情发生了。看起来无论测试值是什么,它都会从我返回的列表中删除

Traceback (most recent call last):'
File "question_1_iii_test.py", line 23, in test_get_values_from_row'
self.assertEqual(sg.get_values_from_row(sudoku1, 0), set([6]))'
AssertionError: Items in the first set but not the second:'
1
2
3
4
5
7
8
9
Items in the second set but not the first:
6

我的问题是:为什么AssertEqual在显然是真的时会返回false?

3 个答案:

答案 0 :(得分:1)

函数的返回值与[6]不同,因此AssertEqual返回false

sg.get_values_from_row(sudoku1, 0) = [5, 3, 4, 7, 8, 9, 1, 2]

不等于[6]

答案 1 :(得分:0)

好的,所以我联系了我的教授,显然,测试代码是错误的,它意味着要反转列表,以便列表中唯一的数字是行中省略的那个,所以在某种程度上;我们没事吧

答案 2 :(得分:-1)

这可能是由于数据类型错误造成的。 set([6])将给出一个type()设置,而sudoku1是一个列表并包含列表

[6]==set([6])

将返回False