Spring NullPointerException无法调用null对象的方法
我正在尝试编写一个简单的测试,它将使用Spring NullPointerException无法调用null对象的方法,spring,jpa,spock,Spring,Jpa,Spock,我正在尝试编写一个简单的测试,它将使用服务测试我的所有crud操作问题是我不知道为什么会出现此错误,甚至无法运行单个测试 @SpringBootTest class EpisodeServiceTest extends Specification { @Autowired private EpisodeService episodeService def "should create episode and save in in the database"() {
服务测试我的所有crud操作
问题是我不知道为什么会出现此错误,甚至无法运行单个测试
@SpringBootTest
class EpisodeServiceTest extends Specification {
@Autowired
private EpisodeService episodeService
def "should create episode and save in in the database"() {
when:
Episode episode = new Episode("title", "description")
and:
episodeService.addEpisode(episode)
then:
episode == episodeService.findById(episode.id)
}
}
@服务
@交易的
公共类情节服务{
私人书信子库书信子库;
@自动连线
公共EpiodeService(EpiodeRepository EpiodeRepository){
this.eposoderepository=eposoderepository;
}
公共插曲findById(长id){
返回eposoderepository.findById(id).orElse(null);
}
公共列表findAll(){
返回eposoderepository.findAll();
}
公共无效附加码(插曲){
如果(插曲!=null)
情节库。保存(情节);
}
公共id(长id){
事件集=findById(id);
如果(插曲!=null)
情节库。删除(情节);
}
}
存储库只是一个简单的存储库,它扩展了
JpaRepository
,我的问题是如何使用spock测试jpa实体?我做错了什么,因为我第一次尝试这样做,早些时候我用JUnit编写了一个简单的测试,但我想尝试spock。解决方案是将此依赖项添加到maven中
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-spring</artifactId>
<version>1.3-groovy-2.5</version>
<scope>test</scope>
</dependency>
org.spockframework
斯波克弹簧
1.3-groovy-2.5
测试
仅仅添加
spock核心是不够的,解决方案是将这种依赖性添加到maven中
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-spring</artifactId>
<version>1.3-groovy-2.5</version>
<scope>test</scope>
</dependency>
org.spockframework
斯波克弹簧
1.3-groovy-2.5
测试
仅添加spock核心是不够的
您的测试类缺少注释@RunWith(SpringRunner.class)
您的测试类缺少注释@RunWith(SpringRunner.class)
提供有关eposoderepository
声明和配置的信息。数据源是为测试配置的吗?@Mark正如我上面提到的,eposoderepository是一个简单的接口,它扩展了JpaRepository,仅此而已。Datasource在docker compose中,它只是一个普通的MySQL。你能提供整个stacktrace吗?@SimonMartinelli stacktrace中的异常只是java.lang.NullPointerException:无法调用null对象上的addEpisode()方法,当然,在代码中,这就是第18行,这就是加法器法。没有更多。请提供一个完整的,有太多的变量在这个问题上没有它,太多的猜测。问题可能出现在repository类或Incide类中(例如,在其equals
方法中)。如果没有人能重现你的问题,答案只不过是或多或少受过教育的猜测。大多数程序员都喜欢分析,而不是猜测。请提供有关eposoderepository
声明和配置的信息。数据源是为测试配置的吗?@Mark正如我上面提到的,eposoderepository是一个简单的接口,它扩展了JpaRepository,仅此而已。Datasource在docker compose中,它只是一个普通的MySQL。你能提供整个stacktrace吗?@SimonMartinelli stacktrace中的异常只是java.lang.NullPointerException:无法调用null对象上的addEpisode()方法,当然,在代码中,这就是第18行,这就是加法器法。没有更多。请提供一个完整的,有太多的变量在这个问题上没有它,太多的猜测。问题可能出现在repository类或Incide类中(例如,在其equals
方法中)。如果没有人能重现你的问题,答案只不过是或多或少受过教育的猜测。大多数程序员都喜欢分析,而不是猜测。@RunWith
注释在这里是不必要的,@springbootest
注释肯定足够了,因为测试现在应该通过了。@RunWith
注释在这里是不必要的,@SpringBootTest
注释已经足够了,因为测试现在应该通过了。
@SpringBootTest
@RunWith(SpringRunner.class)
class EpisodeServiceTest extends Specification {