首页 > 解决方案 > 测试抛出 NullPointerException 而不是 RandomCustomException,但仅在某些环境中

问题描述

我正在从事一个有更多人和分支机构的项目。有一个测试,由其他人编写,奇怪地在某些环境中通过而在其他环境中失败。

我们正在开发不同的分支,但我们确保看到相同版本的项目

git pull origin develop

代码如下所示:

@Test(expected = RandomCustomException.class)
 public void saveReturnsWithCustomException() throws 
   RandomCustomException {
   xService.save(notValidX);   
}

在某些环境中,它会抛出 NullPointerException,因此会失败,而在其他一些环境中,它会抛出 RandomCustomException。

我们已经检查过了,很奇怪,但是所有相关代码在所有环境中似乎都完全相同。

我的 xService 看起来像:

  public X saveX(X x) throws RandomCustomException {
if (!validXName(X.getName())) {
  throw new RandomCustomException("The given name wasn't correct or the field is empty!");
}
return xRepository.save(x);

xRepository 在测试中被模拟。

x存储库:

public interface xRepository extends JpaRepository<X, Long> {
  X findByApplicationUser(ApplicationUser applicationUser);
}

有没有人有一个建议可能是什么问题?

标签: javaspringtestingjunitmocking

解决方案


问题是,在此方法中,x 变量不保证为 Not Null,因此当您调用方法 getName 时它可能会给出 NullPointerException。

  public X saveX(X x) throws RandomCustomException {
if (!validXName(X.getName())) {
  throw new RandomCustomException("The given name wasn't correct or the field is empty!");
}
return xRepository.save(x);

我只能推测原因可能是'x'是一个bean。它可能无法满足此环境中的所有实例化要求。您可以尝试将日志转为调试以查找它。


推荐阅读