JUnit5测试出现空指针java.lang.NullPointerException

刚刚在做Hibernate的时候,用到JUnit5做测试,遇到一个问题:

java.lang.NullPointerException
	at cn.cloudspace.hibernate.entities.HibernateTest.testSessionCache(HibernateTest.java:65)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:436)
	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:170)
	at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:166)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:113)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:58)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:112)
	at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:120)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)

抛出来的异常显示在我的程序的65行找不到资源,所以显示空指针,并且控制台仅仅输出一个“this is testSessionCach()”,其他两个注解里面没有输出:

我的程序大概如下:

public class HibernateTest {
	// 在生产环境里面这几个不能这样写为成员变量,因为可能涉及到并发问题
	private SessionFactory sessionFactory;
	private Session session;
	private Transaction transaction;

	// 初始化Hibernate的方法(在程序执行前自动开启transition等)
	@BeforeEach
	public void init() {
		System.out.println("this is init()");
		Configuration configuration = new Configuration().configure();

		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
				.buildServiceRegistry();
		SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

		Session session = sessionFactory.openSession();

		Transaction transaction = session.beginTransaction();

	}

	// 程序执行之后执行(transition关闭、session销毁等等)
	@After
	public void destroy() {
		System.out.println("this is destroy()");
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

	@Test
	public void testSessionCache() {
		System.out.println("this is testSessionCach()");

		News news = (News)session.get(News.class, 1);
		System.out.println(news);
		
		News news2 = (News)session.get(News.class, 1);
		System.out.println(news2);
	}

}

因为另外两个注解方法体里面的内容没有输出,所以,我就把解决问题的目光放在了另外两个注解里面。打上断点以后在测试发现果然这两个方法死活都进不去。于是跑到JUnit5的官网去看了看。发现了一个问题:

也就是说,在JUnit5以后,之前的注解:@After、@Before都不存在了,取而代之的分别是:@AfterEach、@BeforeEach

于是,我分别把注解改为JUnit5以后所对应的注解,程序就没有问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值