Тестирование с помощью Unittest Python - PullRequest
1 голос
/ 20 мая 2010

Я прошёл тест на Python Unittest. Я запускаю тесты, но хочу провести отрицательное тестирование и хочу проверить, является ли функция, сгенерировавшая исключение, исключением, она проходит, но если не сгенерировано исключение, тест не пройден. У меня есть скрипт:

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)
        self.assertFalse
    except suds.WebFault, e:                        
        self.assertTrue
    else:
        self.assertTrue

Это всегда проходит как True, даже когда функция работает отлично. Я также пробовал различные другие способы, включая:

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)
        self.assertFalse
    except suds.WebFault, e:                        
        self.assertTrue
    except Exception, e:
        self.assertTrue

У кого-нибудь есть предложения?

Спасибо

Я попытался assertRaises без удачи.

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)
        self.assertRaises(WebFault)
    except suds.WebFault, e:                        
        self.assertFalse
    except Exception, e:                        
        self.assertTrue

Это все еще проходит. По какой-то причине он не пытается выполнить оператор assertRaises. Я также пытался: (Функция должна завершиться ошибкой, но тест должен пройти)

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)

    except suds.WebFault, e:                        
        self.assertFalse
    except Exception, e:                        
        self.assertTrue
    else:
        self.assertFalse

По какой-то причине, даже если функция проходит, она не вызывает ошибку. Это всегда независимо от того, что идет в исключения. Если только нет другого утверждения, тогда это идет к этому.

Нашел способ, который работает, но он кажется очень плохим:

Кто-нибудь может предложить более чистый способ сделать это?

    try:
        result = self.client.service.GetStreamUri(self.stream, self.token)

    except suds.WebFault, e:                        
        self.assertFalse
    except Exception, e:
        pass

    try:
        result==result
    except:
        result=None
    if result==None:
        assert True
    else:
        assert False

Ответы [ 4 ]

4 голосов
/ 20 мая 2010

TestCase.assertRaises - это то, что вам нужно, однако в вашем примере вы, кажется, слегка его неправильно используете. Вам нужно что-то вроде:

def test_GetStreamUri(self):
    self.assertRaises(WebFault, self.client.service.GetStreamUri)
    result = self.client.service.GetStreamUri(self.stream, self.token)

Вам нужно сообщить unittest о вызываемом объекте, который вызовет исключение, прежде чем вызывать вызываемый элемент.

1 голос
/ 20 мая 2010

Превосходное тестирование носа обеспечивает @ поднимает декоратор :

@raises(TypeError)
def test_raises_type_error():
    raise TypeError("This test passes")
1 голос
/ 20 мая 2010

Вы пробовали assertRaises?

0 голосов
/ 20 мая 2010

Возможно, вам следует вызвать self.assertTrue(True) и self.assertFalse(True), потому что вы на самом деле не вызываете функции прямо сейчас, просто ссылаетесь на них. Тем не менее, должен быть более чистый способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...