Python - тест свойство выдает исключение

Данный:

def test_to_check_exception_is_thrown(self):
    # Arrange
    c = Class()
    # Act and Assert
    self.assertRaises(NameError, c.do_something)

Если do_something выдает исключение тестовые передачи.

Но у меня есть свойство, и когда я заменяю c.do_something с c.name = "Name" Я получаю ошибку о своем Тестовом Модуле, не импортируемом, и Eclipse выделяется, равняется символу.

То, как я тестирую свойство, выдает исключение?

Править:

setattr и getattr плохо мне знакомы. Они, конечно, помогли в этом случае, спасибо.

11
задан danio 11 February 2014 в 16:47
поделиться

3 ответа

assertRaises ожидает вызываемый объект. Можно создать функцию и передать ее:

obj = Class()
def setNameTest():
    obj.name = "Name"        
self.assertRaises(NameError, setNameTest)

Другая возможность состоит в том, чтобы использовать setattr:

self.assertRaises(NameError, setattr, obj, "name", "Name")

Ваш исходный код повышает синтаксическую ошибку, потому что присвоение является оператором и не может быть помещено в выражении.

17
ответ дан 3 December 2019 в 02:01
поделиться

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

>>> print(foo = 'bar')
------------------------------------------------------------
   File "<ipython console>", line 1
     print(foo = 'bar')
               ^
SyntaxError: invalid syntax

Но выполнение этого в двух шагах работает нормально:

>>> foo = 'bar'
>>> print(foo)
bar

Чтобы проверить, что свойство бросает исключение, используйте блок Try:

try:
   object.property = 'error'
except ExpectedError:
   test_passes()
else:
   test_fails()
-1
ответ дан 3 December 2019 в 02:01
поделиться

Если требуется запретить пользователям видеть простой текстовый пароль, отправляемый из приложения через сеть в API, необходимо использовать SSL.

В случае декомпиляции необходимо сохранить хэш пароля в API, а не исходный пароль. См. пояснение здесь: http://phpsec.org/articles/2005/password-hashing.html .

-121--2449756-

Ссылки на проекты хранятся в файле .csproj или .vbproj, который должен находиться в системе управления версиями. Файл .refresh совершенно неактуален и является только вспомогательным файлом для студии. Если создать локальный каталог для проекта или решения и сохранить все скомпилированные ссылки, еще не находящиеся в GAC, в этом каталоге, можно добавить этот каталог в систему управления версиями и ссылку непосредственно оттуда. Таким образом, все разработчики гарантированно будут иметь самую последнюю копию (из системы управления версиями) .dll при выполнении следующей компиляции, и это никогда не повлияет на/bin.

Переход ваших разработчиков на «Получение последней версии»... ты сам по себе для этого. Я до сих пор не понял.

Может быть, еще одна записка.

-121--3010609-

Второй аргумент для assertRaises должен быть вызываемым .

Оператор назначения (т.е. class.name = «Name» ) не является вызываемым, поэтому он не будет работать. Используйте setattr для выполнения такого назначения, как

self.assertRaises(NameError, setattr, myclass, "name", "Name")

Кроме того, нельзя присвоить классу , поскольку это ключевое слово.

8
ответ дан 3 December 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: