TypeError:字符串索引必须是整数,而不是str。我没看到什么?

时间:2017-04-12 23:17:30

标签: python python-2.7 python-3.x unit-testing python-unittest

我正在测试一些代码并希望测试以查看API是否格式正确。下面是我用来测试的字典。

self.test_query_values_positive = {
    'DriverAge' : 33,
    'PickUpCity' : 'Tampa',
    'CarType' : 'luxury'
}

以下是有问题的单元测试:

def testQueryCreationPositive(self):
    test_query = self.testDBM.create_http_query(self.test_query_values_positive)
    self.assertEqual("some.api/findCar?city=Tampa&class=luxury",
                     self.testDBM.create_http_query(test_query))

这是我从testDBM对象调用的函数

def create_http_query(self, slots):
    base_url = 'some.api/findCar?'
    query = None
    if self.verify_age(slots['DriverAge']):
        pickup = slots['PickUpCity'].title()
        car_type = slots['CarType'].lower()
        query = '{0}city={1}&class={2}'.format(base_url, pickup, car_type)
    else:
        query = None
    return query

由此,我得到一个TypeError,如下所示:

TypeError: string indices must be integers, not str

我没看到什么?我在它下面有一个负面测试,运行完全正常,但这个没有。那是为什么?

编辑:我忘了说有问题的一行是:

if self.verify_age(slots['DriverAge']):

除此之外似乎运行良好。

1 个答案:

答案 0 :(得分:1)

def testQueryCreationPositive(self):
    test_query = self.testDBM.create_http_query(self.test_query_values_positive)
    self.assertEqual("some.api/findCar?city=Tampa&class=luxury",
                     self.testDBM.create_http_query(test_query))  # this line is bad

这就是你想要的:

self.assertEqual("some.api/findCar?city=Tampa&class=luxury", test_query)