教学管理系统-EJB3单元测试

本文介绍如何在不依赖服务器的情况下进行EJB3单元测试。通过下载并配置jboss-EJB-3.0_Embeddable_ALPHA_7.zip,遵循6个步骤,包括设置classpath、修改配置文件和编写测试用例,实现了EJB3的离线测试。在实验过程中遇到两个警告,但并未影响测试的正常运行。这是一个高效且节省时间的测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前采用连接服务直接测试,看了一篇PPT上面说可以脱离服务器进行测试,到http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=132063下载jboss-EJB-3.0_Embeddable_ALPHA_7.zip

正在实验中...睡觉...实验完毕。

步骤

1.新建测试项目,将jboss-EJB-3.0_Embeddable.zip中的conf和lib目录解压到项目文件夹中。
2.将conf添加到classpath中。
3.将mysql-connector-java-3.1.12-bin.jar复制到lib目录,将lib目录下的jar文件中添加到classpath中。
4.修改embedded-jboss-beans.xml文件中"DefaultDSBootstrap"一节(倒数第2个bean)中的属性。
5.在Java Build Path中添加org.bnuitse.tms.ejb项目引用。EJB3StandaloneBootstrap会扫描里面的EJB3定义。
6.参考Tutorial写了测试,运行通过。感觉挺好,不需要打包发布到服务器就可以进行测试了。

向在开源方面做出贡献的专家们致敬。C

问题

出现两个警告,其它运行正常。
WARN  31-05 11:49:43,924 (BeanSchemaBinding.java:init:227)  -You should use the 2.0 version of the Microcontainer xml. xmlns='urn:jboss:bean-deployer:2.0'
WARN  31-05 11:49:49,041 (Log4JLogger.java:warn:104)  -Persistence provider caller does not implements the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null.

第一个警告解决:

将conf下的XML文件中

<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
            xmlns="urn:jboss:bean-deployer">

改为

<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_2_0.xsd"
            xmlns="urn:jboss:bean-deployer:2.0">
第二个警告对功能没有影响,见http://www.jboss.com/index.html?module=bb&op=viewtopic&t=83204
代码
package org.bnuitse.tms;
import java.util.Hashtable;
import javax.naming.InitialContext;
import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
import org.junit.AfterClass;
import org.junit.BeforeClass;

public class BaseTestCase {
 public static InitialContext getInitialContext() throws Exception {
  Hashtable props = getInitialContextProperties();
  return new InitialContext(props);
 }
 @SuppressWarnings("unchecked")
 private static Hashtable getInitialContextProperties() {
  Hashtable props = new Hashtable();
  props.put("java.naming.factory.initial", "org.jnp.interfaces.LocalOnlyContextFactory");
  props.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
  return props;
 }
 @BeforeClass
 public static void startupEmbeddedJboss() {
  EJB3StandaloneBootstrap.boot(null);
  EJB3StandaloneBootstrap.scanClasspath();
 }
 @AfterClass
 public static void shutdownEmbeddedJboss() {
  EJB3StandaloneBootstrap.shutdown();
 }
}
package org.bnuitse.tms.security;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.naming.InitialContext;
import org.bnuitse.tms.BaseTestCase;
import org.bnuitse.tms.model.security.College;
import org.bnuitse.tms.model.security.CollegeClass;
import org.bnuitse.tms.model.security.Student;
import org.bnuitse.tms.service.security.CollegeClassService;
import org.bnuitse.tms.service.security.CollegeService;
import org.bnuitse.tms.service.security.StudentService;
import org.hibernate.Hibernate;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class SecurityTestCase extends BaseTestCase{
 StudentService studentService;
 CollegeClassService collegeClassService;
 CollegeService collegeService;
 College college;
 @Before
 public void setUp() throws Exception {
  InitialContext ctx = getInitialContext();
  collegeService = (CollegeService) ctx.lookup("tms/security/CollegeService");
  collegeClassService = (CollegeClassService) ctx.lookup("tms/security/CollegeClassService");
  studentService = (StudentService) ctx.lookup("tms/security/StudentService");
  College college = new College();
  college.setName(String.valueOf(System.currentTimeMillis()));
  int collegeId = collegeService.persist(college);
  this.college = collegeService.find(collegeId);
 }
 @After
 public void tearDown() throws Exception {
  collegeService.remove(college.getId());
 }
 private College createCollege() {
  String testName = String.valueOf(System.currentTimeMillis());
  College college = new College();
  college.setName(testName);
  return college;
 }
 private CollegeClass createCollegeClass() {
  String testName = String.valueOf(System.currentTimeMillis());
  CollegeClass collegeClass = new CollegeClass();
  collegeClass.setName(testName);
  collegeClass.setGrade(Calendar.getInstance().get(Calendar.YEAR));
  try {
   Thread.sleep(10);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  return collegeClass;
 }
 private Student createStudent() {
  Student s1 = new Student();
  s1.setId((int) System.currentTimeMillis());
  s1.setCode(String.valueOf(System.currentTimeMillis()));
  s1.setName(String.valueOf(System.currentTimeMillis()).substring(0, 10));
  try {
   Thread.sleep(10);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  return s1;
 }
 @Test
 public void testCreateCollege() {
  College college = createCollege();
  int id = collegeService.persist(college);
  assertEquals("本地Id不变", 0, college.getId());
  assertTrue("持久化后产生新Id", id != 0);
  College newCollege = collegeService.find(id);
  assertEquals("id相同", id, newCollege.getId());
  assertEquals("name相同", college.getName(), newCollege.getName());
  College queryByName = collegeService.find(college.getName());
  assertEquals(id, queryByName.getId());
  assertEquals(college.getName(), queryByName.getName());
  collegeService.remove(id);
 }
 @Test
 public void testCreateCollegeClass() throws Exception {
  CollegeClass collegeClass = createCollegeClass();
  collegeClass.setCollege(college);
  Student s1 = createStudent();
  s1.setCollegeClass(collegeClass);
  List<Student> students = new ArrayList<Student>();
  students.add(s1);
  Thread.sleep(10);
  Student s2 = createStudent();
  s2.setCollegeClass(collegeClass);
  students.add(s2);
  collegeClass.setStudents(students);
  int classId = collegeClassService.persist(collegeClass);
  assertTrue(classId != 0);
  CollegeClass reload = collegeClassService.find(classId, true);
  assertEquals(collegeClass.getName(), reload.getName());
  assertEquals(collegeClass.getCollege().getId(), reload.getCollege().getId());
  assertEquals(collegeClass.getCollege().getName(), reload.getCollege().getName());
  assertEquals(2, collegeClass.getStudents().size());
 }
 @Test
 public void testCollegeClassMerge() {
  CollegeClass collegeClass = createCollegeClass();
  collegeClass.setCollege(college);
  int classId = collegeClassService.persist(collegeClass);
  collegeClass = collegeClassService.find(classId, true);
  assertEquals(0, collegeClass.getStudents().size());
  Student s1 = createStudent();
  collegeClass.addStudent(s1);
  Student s2 = createStudent();
  collegeClass.addStudent(s2);
  assertEquals(2, collegeClass.getStudents().size());
  collegeClass = collegeClassService.merge(collegeClass);
  CollegeClass reload1 = collegeClassService.find(classId, true);
  assertEquals(2, reload1.getStudents().size());
  collegeClass.setName("newName");
  // 删除学生
  Student s = collegeClass.getStudents().iterator().next();
  collegeClass.removeStudent(s);
  collegeClass = collegeClassService.merge(collegeClass);
  assertEquals("newName", collegeClass.getName());
  assertEquals(1, collegeClass.getStudents().size());
  System.out.println("after add 2 students merge result:" + collegeClass.getStudents().size());
  CollegeClass reload2 = collegeClassService.find(classId, true);
  assertEquals(1, reload2.getStudents().size());
  // 确保学生已删除
  Student orphenStudent = studentService.find(s.getId());
  assertEquals(null, orphenStudent);
 }
 @Test
 public void testStudentAlong() {
  CollegeClass collegeClass = createCollegeClass();
  collegeClass.setCollege(college);
  int classId = collegeClassService.persist(collegeClass);
  collegeClass = collegeClassService.find(classId, true);
  assertEquals(0, collegeClass.getStudents().size());
  Student s1 = createStudent();
  s1.setCollegeClass(collegeClass);
  collegeClass.getStudents().add(s1);
  studentService.persist(s1);
  Student s2 = createStudent();
  s2.setCollegeClass(collegeClass);
  collegeClass.getStudents().add(s2);
  assertEquals(2, collegeClass.getStudents().size());
  studentService.persist(s2);
  collegeClass = collegeClassService.find(classId, true);
  System.out.println("in test student");
  assertEquals(2, collegeClass.getStudents().size());
 }
 @Test
 public void testGetAllCollege() {
  int initCount = collegeService.findAll().size();
  College college = createCollege();
  int id = collegeService.persist(college);
  List<College> colleges = collegeService.findAll();
  assertEquals("对象数量增加", 1, colleges.size() - initCount);
  collegeService.remove(id);
 }
 @Test
 public void testCollegeClass() {
  College college = createCollege();
  int classCount = 10;
  for (int i = 0; i < classCount; i++) {
   CollegeClass cls1 = new CollegeClass();
   cls1.setCollege(college);
   cls1.setName("class" + i);
   cls1.setGrade(2005);
   college.getClasses().add(cls1);
  }
  int id = collegeService.persist(college);
  College college1 = collegeService.find(id);
  assertFalse(Hibernate.isInitialized(college1.getClasses()));
  assertFalse(Hibernate.isInitialized(college1.getDepts()));
  College college2 = collegeService.find(id, true);
  assertTrue(Hibernate.isInitialized(college2.getClasses()));
  assertTrue(Hibernate.isInitialized(college2.getDepts()));
  collegeService.remove(id);
 }
 /**
  * 测试查询所有学院信息(包含班级数据)
  *
  */
 @Test
 public void testGetAllColleges() {
  List<College> colleges = collegeService.findAllColleges();
  for (int i = 0; i < colleges.size() - 1; i++) {
   assertFalse(colleges.get(i).getId() == colleges.get(i + 1).getId());
  }
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值