【发布时间】:2019-01-31 09:27:37
【问题描述】:
我正在从事一个有更多人员和分支机构的项目。有一个测试,由其他人编写,奇怪的是在某些环境中通过而在其他环境中失败。
我们正在开发不同的分支,但我们确保看到的项目版本相同
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);
}
有没有人建议问题是什么?
【问题讨论】:
-
在 xService 中的参数 saveX() 'X x' 保证不为空?
-
感觉就像当你做 X.getName() X 时它抛出 NullPointerException 时为空,你有类似弹簧配置文件的东西存在于某些环境而不是其他环境吗?
-
@D.Tomov 不是,是的,解决方案是将服务中的条件更改为 (x.getName == null || !validXName(X.getName())),但我仍然无法理解它如何在我的环境中为空,而在其他人的环境中不为空。据我所知,我们还没有做任何会影响这里任何事情的事情。无论如何,它有效,所以感谢您的帮助!
-
第一个问题是你应该调试那个 NPE。如:它来自哪里?然后,查看为空的对象,并了解它为什么为空。现在,我倾向于将其作为 DUP 关闭到stackoverflow.com/questions/218384/… ...因为这里有零信息可以让我们为您提供帮助。一个对象是空的,所以找出是哪个对象,然后从那里开始工作。我们对此无能为力。
标签: java spring testing junit mocking