J'ai quelque chose d'objectivé le code de test fonctionnant dans Junit et que j'obtiens cette erreur: Comment puis-je résoudre ce problème pour le code de test? p> p>
5 Réponses :
Jeff Schnitzer a répondu ici ici: https://groups.google. com / forum / #! Sujet / Objectif-appengine / 8hinahg7irg . Ce lien pointe vers https://groups.google.com/forum/# ! Sujet / Objectif-Appengine / O4FHC_I7EGK Où Jeff suggère la solution de contournement rapide et sale suivante:
mon @beforeMethod commence un contexte d'objectivé (ObjectIryService.begin ()) P> Li>
My @AfterMethod ferme le contexte objectivé p> li> ul>
Jeff suggère que nous utilisons Voici comment ma mise en œuvre a l'air: P> objectivyservice.run () code> à la place mais admet que c'est plus de travail. P>
public class DownloadTaskRepositoryImplTest {
// maximum eventual consistency (see https://cloud.google.com/appengine/docs/java/tools/localunittesting)
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
.setDefaultHighRepJobPolicyUnappliedJobPercentage(100));
private Closeable closeable;
@Before
public void setUp() {
helper.setUp();
ObjectifyRegistrar.registerDataModel();
closeable = ObjectifyService.begin();
}
@After
public void tearDown() {
closeable.close();
helper.tearDown();
}
@Michael ... Où avez-vous obtenu le "ObjectifIferregistrar?"
Cette solution ne peut tout simplement pas fonctionner, "ObjectiveRegistrar" n'existe pas
ObjectiveRInyRegistrar signifie probablement appeler objectIfystervice.register ().
J'ai aussi eu ce problème et j'ai remarqué que je n'avais pas ajouté l'ObjectFilter à mon web.xml J'ai également dû inclure des bocaux d'objectivation et de goyave dans mon répertoire web-inf> lib et les inclure dans mon chemin de construction. P> p>
Cela peut être mon problème. Où est-ce que cela va dans web.xml ??
Je faisais face à la même erreur et Cette solulation a travaillé pour moi
J'ai une application basée sur des points finaux qui utilisent objectivé. Lorsque je le laisse avec la mise à l'échelle par défaut / automatique, tout fonctionne bien. Une fois que je active la mise à l'échelle de base, je reçois l'exception suivante lors de l'exécution de la méthode du point de terminaison: P> blockQuote>
xxx pré> La bonne nouvelle est que cela s'en va lorsque vous activez RequestDispatcher Prise en charge du fichier web.xml comme vous. Je pense que c'est une documentation question, alors, mais je ne savais pas si tout le monde serait d'accord si j'ai édité le Page wiki directement. Voici l'entrée Web.xml proposée, qui a fonctionné Pour moi: p> blockQuote>
xxx pré> p>
Améliorer la réponse de Michael-Osofsky, j'ajoute ceci à ma classe d'assistance et remplace p> pour cette p > ofService.java strong> p>
comme Jeff Schnitzer dit dans le lien fourni par Michael Osofsky:
Dans vos tests, vous devez avoir une idée d'une «demande» même si elle est juste conceptuelle. Si "chaque test est une demande en soi", vous pouvez utiliser @ avant / @ après conjointement avec ObjectiveService.begin () pour délimiter les demandes. Cependant, ce n'est probablement pas en réalité la façon dont vos tests fonctionnent - ce n'est pas la façon dont mes tests fonctionnent. P> blockQuote>
Il continue ensuite à dire: P>
Ce serait plus joli avec des fermetures JDK8, mais l'idée est simple - vous enveloppez une unité de travail dans un contexte qui représente une demande. Il serait probablement intelligent d'ajouter encore plus de contexte comme l'authentification dans cette emballeuse. P> BlockQuote>
J'ai proposé la mise en œuvre suivante de son idée. Avec la solution ci-dessous, vous pouvez vous assurer que chaque appel d'un serveur de servlet obtient une nouvelle session d'objectivité tout en effectuant des appels de service de servlet dans une seule ligne de code. Il découle également vos tests de manière explicitement préoccupante quant à objectivement et vous permet d'ajouter un contexte supplémentaire sans objectivation autour de vos gestionnaires de servlet. P>
Ma solution ci-dessous fonctionne avec Object.1.22. J'ai essayé d'utiliser l'objectif 6+, mais j'ai eu des problèmes qui semblent être liés à Ce . P>
Tout d'abord, définissez un fournisseur personnalisé capable de capturer les exceptions projetées par un gestionnaire de servlet. p>
xxx pré> Suivant, définissez une méthode d'emballage qui accepte Votre nouveau fournisseur personnalisé en tant qu'entrée et enveloppez l'appel à servletsupplier.get () dans un bloc d'essai avec les ressources qui appelle ObjectIfystervice.begin (). Vous devez également enregistrer vos classes d'entité avant d'appeler servletsupplier.get (). P>
xxx pré> Enfin, n'importe où dans vos tests que vous appelez le gestionnaire de servlet, vous devez le faire à l'aide de la méthode Wrapper . P>
MyObj myObjPost = runInServletContext(() -> getServlet().doPost(request, response)); // Assert results of doPost call. MyObj myObjGet = runInServletContext(() -> getServlet().doGet(request, response)); // Assert results of doGet call.