Estoy usando el marco de Google App Engine testbed
para escribir casos de prueba con objetos simulados. Esto está documentado here. Tengo mis pruebas de almacén de datos funcionando bien utilizando la base de datos simulada (Testbed.init_datastore_v3_stub
), y esto permite que mis casos de prueba se ejecuten en una base de datos nueva y rápida que se reinicializa para cada caso de prueba. Ahora quiero probar la funcionalidad que depende del usuario actual.¿Cómo se burla del servicio del usuario en App Engine?
Hay otro servicio de prueba llamado Testbed.init_user_stub
, que puedo activar para obtener el servicio de usuario "falso". Lamentablemente, no parece haber documentación para este. Estoy activación y el uso que de esta manera:
import unittest
from google.appengine.ext import testbed
from google.appengine.api import users
class MyTest(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_user_stub()
def testUser(self):
u = users.get_current_user()
self.assertNotEqual(u, None)
El problema es que no he encontrado ninguna manera de decirle al servicio de usuario "falso" para autenticar a un usuario "falso". Entonces, ejecutar esa prueba, I (previsiblemente) consigo
AssertionError: None == None
que significa que el servicio de usuario falso está diciendo mi aplicación que el usuario actual no está en el sistema. ¿Cómo puedo saber el servicio de usuario falso pretender que un usuario se registra ¿en? Idealmente, me gustaría poder especificar el apodo falso del usuario, el correo electrónico, el ID de usuario y si son o no administradores. Parece que esto sería algo bastante común de querer (ya que es necesario probar cómo se comporta la aplicación cuando a) nadie está conectado, b) un usuario está conectado, yc) un administrador ha iniciado sesión, pero googleando "init_user_stub" devuelve casi nada.
Nota: Si desea probar el programa anterior, es necesario añadir esto a la parte superior:
import sys
sys.path.append('/PATH/TO/APPENGINE/SDK')
import dev_appserver
dev_appserver.fix_sys_path()
y esto hasta el fondo:
if __name__ == '__main__':
unittest.main()
esto es básicamente la idea correcta. excepto que desea usar ['testbed.setup_env()'] (http://code.google.com/appengine/docs/python/tools/localunittesting.html#Changing_the_Default_Environment_Variables) en lugar de 'os.environ' directamente. – ryan
Estoy bajando esto porque ** esto está contaminando el medio ambiente **. Cabe señalar que se requiere una limpieza. Esto se puede hacer usando testbed como @ryan declaró. – siebz0r