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("kowalkis@test.pl").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("test3@test.pl");
user.save();
}
}
i konczy sie to tak, ze w user.save() jest NPE