3
votes

I am trying to access the database through a class using PlayFremwork and writing a test

import static org.junit.Assert.*;
import javax.persistence.EntityManager;
import models.com.vlist.entity.classes.Playlist;
import org.junit.Test;
import play.db.jpa.JPA;
import play.db.jpa.Transactional;
import play.jobs.OnApplicationStart;
import play.mvc.Scope.Session;
public class PlaylistTest {
@Test
    @Transactional
    public void insertIntoPlaylist() {
        Playlist playlist = new Playlist();
        playlist.setId(1);
        playlist.setName("test");

        EntityManager em = JPA.em();
        em.persist(playlist);
    }
}

The error stacktrace is:


    play.exceptions.JPAException: The JPA context is not initialized. JPA Entity Manager automatically start when one or more classes annotated with the @javax.persistence.Entity annotation are found in the application.
        at play.db.jpa.JPA.get(JPA.java:22)
        at play.db.jpa.JPA.em(JPA.java:51)
        at PlaylistTest.insertIntoPlaylist(PlaylistTest.java:23)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)  

How can I resolve this issue while writing test?

Thank you

FIXED!! By extending FunctionalTest

public class PlaylistTest extends FunctionalTest {

    @Test
    @Transactional
    public void insertIntoPlaylist() {
        Playlist playlist = new Playlist();
        playlist.setName("new_playlist_again");

        EntityManager em = JPA.em();
        em.persist(playlist);
    }
}
1
add your answer as an answer, rather than editing the question, and accept your own answer to make it easier for people to search in the futureCodemwnci
did that, thanks for letting me knowdaydreamer

1 Answers

2
votes
public class PlaylistTest extends FunctionalTest {

    @Test
    @Transactional
    public void insertIntoPlaylist() {
        Playlist playlist = new Playlist();
        playlist.setName("new_playlist_again");

        EntityManager em = JPA.em();
        em.persist(playlist);
    }
}