测试仅在某些环境中抛出NullPointerException而不是RandomCustomException

时间:2019-01-31 09:27:37

标签: java spring testing junit mocking

我正在与更多的人和分支机构进行项目。有一个由其他人编写的测试,在某些环境中怪异地通过了,在其他一些环境中却失败了。

我们正在不同的分支上工作,但是我们确保使用相同的版本查看项目

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在测试中被模拟。

xRepository:

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

有人建议这个问题是什么吗?

1 个答案:

答案 0 :(得分:1)

问题在于,在此方法中,x变量未保证不为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。它可能无法满足此环境中的所有实例化要求。您可以尝试将日志调试以寻找它。