2016-09-15 57 views
0

当我对单元测试运行我的代码时,出现问题。任何意见,将不胜感激。请看以下代码:返回正数和负数总和的列表的函数

def manipulate_data(data): 
    count = 0 
    sum1 = 0 
    new_list = [] 
    for x in data: 
     if x > 0: 
      count += 1 

     if x < 0: 
      sum1 += x 

    new_list.append(count) 
    new_list.append(sum1) 

    return new_list 

单元测试是下面:

import unittest 

class ManipulateDataTestCases(unittest.TestCase): 
    def test_only_lists_allowed(self): 
    result = manipulate_data({}) 
    self.assertEqual(result, 'Only lists allowed', msg='Invalid argument') 

    def test_it_returns_correct_output_with_positives(self): 
    result = manipulate_data([1, 2, 3, 4]) 
    self.assertEqual(result, [4, 0], msg='Invalid output') 

    def test_returns_correct_ouptut_with_negatives(self): 
    result = manipulate_data([1, -9, 2, 3, 4, -5]); 
    self.assertEqual(result, [4, -14], msg='Invalid output') 

我得到的错误是:

`Total Specs: 3 Total Failures: 1 
    1 . test_only_lists_allowed 
    Failure in line 11, in test_only_lists_allowed 
     self.assertEqual(result, 'Only lists allowed', msg='Invalid argument') 
    AssertionError: Invalid argument` 
+0

你的函数实际上确实与字典工作,并返回“正确”的结果( '{}'的情况下,结果是'[0,0]')。 – tcooc

回答

0

为的情况下{},manipulate_data的结果是[0,0] 试试这个:

def manipulate_data(data): 
    if not isinstance(data, list): 
     return 'Only lists allowed' 

    count = 0 
    sum1 = 0 
    new_list = [] 
    for x in data: 
     if x > 0: 
      count += 1 

     if x < 0: 
      sum1 += x 

    new_list.append(count) 
    new_list.append(sum1) 
    return new_list 

import unittest 

class ManipulateDataTestCases(unittest.TestCase): 
    def test_only_lists_allowed(self): 
    result = manipulate_data({}) 
    # print('result: ', result) 
    self.assertEqual(result, 'Only lists allowed', msg='Invalid argument') 


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

感谢您的建议,但我无法编辑测试。 – MyPoorBrain

+0

你可以编辑manipulate_date吗? – Hydex

+0

是的,我可以..任何想法? – MyPoorBrain

0

的结果是正确的。在test_only_lists_allowed()中,您将函数返回的列表与字符串'Only lists allowed'进行比较。

该测试将失败。

+0

我不是那个写测试的人,我不能编辑它们 – MyPoorBrain

0

你写单元测试?做过的人认为你只应该查看名单。在Python中做到这一点的方法是:

>>>l = [] 
>>>isinstance(l, list) 
True 
>>>d = {} 
>>>isinstance(d, dict) 
True 
>>>isinstance(d, list) 
False 

它写的,你的程序将尝试遍历所有iterables,包括dict的方式。如果你想保持这种行为,请记住它将迭代dict的键而不是值。

+0

我可以不要改变测试,所以我正在寻找一种方法来使我的代码基于它的工作 – MyPoorBrain

+0

你的导师(我假设)希望你只检查列表。如果数据是列表,isinstance(数据,列表)将返回True。其余的你应该可以在你自己的 –

+0

上做,请你可以解释原因我返回的是一个列表,所以我不明白为什么它失败 – MyPoorBrain

1

高清manipulate_data(数据): 如果没有isinstance(数据列表): 回报“只允许列表”

count = 0 
sum1 = 0 
new_list = [] 
for x in data: 
    if x > 0: 
     count += 1 

    if x < 0: 
     sum1 += x 

new_list.append(count) 
new_list.append(sum1) 
return new_list