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

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

x存储库:

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

有没有人建议问题是什么?

最佳答案

问题是,在这个方法中,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。实例化可能无法满足此环境中的所有要求。您可以尝试将日志转为调试以查找它。

关于java - 测试抛出 NullPointerException 而不是 RandomCustomException,但仅在某些环境中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54457268/

相关文章:

java - RecyclerView item滑动更新背景textview

java - 如何在获取列名的查询中省略第一个结果?

java - 响应休息分页请求的正确方法

ruby-on-rails - Rails 测试的结果不一致

java - 如何将 java swing 应用程序转换为在 android 上工作

java - Jackson Json 序列化器附加内部属性

java - 如何从系统变量设置 Spring 配置文件?

java - 单元测试进行中!不需要测试播放服务器的框架应用程序

ruby-on-rails - 在测试 Controller 时保持 DRY,通过 CanCan 授权

java - JtabbedPane 内的 JtabbedPane