401 unauthorized_client
blockquote>Означает, что ваш код не был авторизован. Если вы хотите получить доступ к личным данным пользователя, вам необходимо войти в систему. Для доступа к API Google вашему коду необходим токен доступа.
То, что вы должны сделать, это авторизовать свой код один раз, используя Oauth2 в браузере, сохранить токен обновления где-нибудь и попросить, чтобы задание cron прочитало токен обновления и запросило новый токен доступа до его запуска.
Предполагая, что у вас есть учетная запись, которую вы пытаетесь вставить в нее, вы также можете рассмотреть возможность использования служебной учетной записи.
Обновить токен
Если вы храните токен обновления в базе данных, вы должны назначить его своему клиенту, прежде чем запускать здесь свой код. Я делаю это с токеном обновления, хранящимся в переменная сеанса.
$client->refreshToken(
401 unauthorized_client
blockquote>Означает, что ваш код не был авторизован. Если вы хотите получить доступ к личным данным пользователя, вам необходимо войти в систему. Для доступа к API Google вашему коду необходим токен доступа.
То, что вы должны сделать, это авторизовать свой код один раз, используя Oauth2 в браузере, сохранить токен обновления где-нибудь и попросить, чтобы задание cron прочитало токен обновления и запросило новый токен доступа до его запуска.
Предполагая, что у вас есть учетная запись, которую вы пытаетесь вставить в нее, вы также можете рассмотреть возможность использования служебной учетной записи.
Обновить токен
Если вы храните токен обновления в базе данных, вы должны назначить его своему клиенту, прежде чем запускать здесь свой код. Я делаю это с токеном обновления, хранящимся в переменная сеанса.
[110]SESSION['refresh_token']);
assert False
выдает исключение без полезной информации регистрации. В тесте была ошибка.
self.assertFalse()
выдает исключение при сбое теста с информацией о сбое теста, такой как сообщение и имя теста.
Существует разница между ошибкой - тест не может даже выполняться - и ошибкой - тестовый код работал, но дал неправильный ответ.
Ошибки - серьезная проблема с вашим кодом.
Сбои - это просто сбои, которые нужно исправить.
Если вы запустите
import unittest
class Test_Unittest(unittest.TestCase):
def test_assert(self):
assert False
def test_assertFalse(self):
self.assertFalse(True)
if __name__ == '__main__':
unittest.main()
Вы получите ту же информацию в журнале, тот же сбой:
FF
======================================================================
FAIL: test_assert (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/unutbu/pybin/test.py", line 6, in test_assert
assert False
AssertionError
======================================================================
FAIL: test_assertFalse (__main__.Test_Unittest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/unutbu/pybin/test.py", line 8, in test_assertFalse
self.assertFalse(True)
AssertionError
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=2)
Причина, по которой оба случая обрабатываются одинаково, заключается в том, что unittest.TestCase
определяет
failureException = AssertionError
Когда вы говорите assert False
, возникает AssertionError.
Когда вы говорите self.assertFalse(True)
, возникает failureExeception
.
Поскольку эти исключения одинаковы, видимой разницы нет.
assert
и self.assertFalse
все же отличаются в обычном использовании.
assert
используется для объявления того, что определенное условие должно выполняться в определенный момент кода. Он используется как костыль во время разработки, но не предназначен для использования в производственном коде. Если вы запустите python -O my_unittest.py
, все утверждения assert будут проигнорированы. Это нарушит ваше намерение использовать assert
, возможно, заставив ваши модульные тесты пройти даже при наличии сбоя.
Даже если (без флага -O) результат тот же, assert
не предназначен для использования в коде модульных тестов. При написании модульных тестов используйте self.assertTrue
или self.assertFalse
.
Один момент, который ответы до сих пор не упоминали, заключается в том, что существует несколько тестовых фреймворков (например, py.test и nose), которые используют магию самоанализа python, чтобы позволить вам писать модульные тесты, подобные этому:
# test_this_and_that.py
def test_frobber():
assert frobber('x') == 'y'
# EOF
, не требуя какого-либо шаблона unittest, который вы видели выше. Поэтому в некоторых случаях это может свестись к просто кадру / стилистическому вопросу.