在python中编写单元测试用例,用于以下算法

时间:2015-03-06 15:06:42

标签: python unit-testing testcase

我已编写代码,但不了解如何在python中为下面的程序编写测试用例。有人可以提供示例测试用例吗?

提前致谢。我已经尝试了一些示例,但我不明白应该测试代码的哪些部分,因为它只选择与最高价格相关的公司名称。

with open('/home/company_data.csv') as f:
    reader = csv.reader(f)
    tup = namedtuple('tup', ['price','year', 'month'])
    d = OrderedDict()
    names = next(reader)[2:]
    for name in names:
     d[name] = tup(0,'year', 'month')
    for row in reader:
        year, month = row[:2]        
        for name, price in zip(names, map(int, row[2:])):    
           if d[name].price < price:     
               d[name] = tup(price, year, month)

3 个答案:

答案 0 :(得分:1)

您应该尽可能使代码尽可能通用。就像在这种情况下稍微改变它所以它可以处理任何文件名。类似的东西:

def foo(filename):
  with open(filename) as f:
    reader = csv.reader(f)
    tup = namedtuple('tup', ['price','year', 'month'])
    d = OrderedDict()
    names = next(reader)[2:]
    for name in names:
     d[name] = tup(0,'year', 'month')
    for row in reader:
        year, month = row[:2]        
        for name, price in zip(names, map(int, row[2:])):    
           if d[name].price < price:     
               d[name] = tup(price, year, month)
    return d

然后用这样的东西测试:

if __name__ == "__main__": #run if standalone
    results = foo('test.csv')
    assert (results == expectedResults)

其中expectedResults包含您期望结果的样子。 &#34; ==&#34;可能不会完全正常,但对某些平等的测试。如果使用断言和/或独立检查,则可以使用代码保留测试。

答案 1 :(得分:1)

测试用例证明了您的功能的正确性。你如何测试正确性?通过“证明”它。因此,您可以使用预定义的输出针对您的函数编写测试用例,以便验证它是否返回了预期的结果。

示例:使用python的unittest模块,您可以为添加两个数字的函数编写测试:

import unittest

def my_adding_function(x,y):
    return x+y

class TestMyFunction(unittest.TestCase):
    def setUp(self):
        pass

    def test_my_function(self):
        self.assertEqual(my_adding_function(3,4), 7)

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

当你在3&amp; 4,我应该得到7.如果你的功能正确,测试将通过 - 如果没有则失败。

对于您的情况,如果您想从样本csv中选择具有最高价格的公司名称,可以这样做:

import unittest

def get_highest_valued_company(input_csv):
    process[...]
    return 'highest company name'

class TestMyFunction(unittest.TestCase):
    def setUp(self):
        pass

    def test_my_csv_function(self):
        self.assertTrue(get_highest_valued_company(csv)=='name_here')

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

答案 2 :(得分:0)

这样的代码很难测试,因为没有输出,但是你可以通过提供一组样本数据并检查它正在选择的公司来测试它是否正在挑选合适的公司知道价格最高(您可能需要更改代码以使其更具动态性以选择数据)