Witam,
stworzylem sobie małą aplikacje która w zalozeniu ma na razie dodawac userów do bazy. Wszystko będzie działało na wildfly'u.
Chciałem teraz stworzyć test który przetestuje to wszystko.
Generalnie są dwie klasy:

//DataObject.java
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public abstract class DataObject<T> {
    @PersistenceContext
    EntityManager em;

    private Class<T> typeParameterClass;

    public DataObject() {}

    public DataObject(Class<T> typeParameterClass) {
        this.typeParameterClass = typeParameterClass;
    }

    @SuppressWarnings("unchecked")
    public T instance(long id)
    {
        return (T) em.find(typeParameterClass.getClass(), id);
    }

    public void save() {
        em.persist(this);
    }
}

Oraz klasa User'a

//User.java
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User extends DataObject {

    @Id @GeneratedValue
    private long userId;

    @Email
    private String email;

    @NotEmpty
    private String name;

    @NotEmpty
    private String surname;

    private String phone;


    public long getUserId() {
        return userId;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

}

W założeniu chciałem aby działało to w ten sposób:

new User().setName("TEST").setSurname("TEST2").setEmail("[email protected]").save();

jednak w czasie testowania w klasie DataObject w metodzie save em jest nullem.
Tak naprawde nie wiem czy to w ogóle będzie działać, ale chciałem zacząć od testu, żeby to przetestować.

Plik testu wyglądał tak:

import junit.framework.Assert;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;


@RunWith(Arquillian.class)
public class UserTests {
    @Deployment
    public static Archive<?> createDeployment() {
        return ShrinkWrap.create(WebArchive.class, "test.war")
                .addClasses(User.class)
                .addPackage(User.class.getPackage())
                .addAsManifestResource("META-INF/persistence.xml")
                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
    }

    @Test
    public void userPersistance() {
        User user = new User();

        user.setName("test");
        user.setSurname("tes2");
        user.setEmail("[email protected]");

        user.save();
    }
}

i konczy sie to tak, ze w user.save() jest NPE