Nullpointerexceptiopn avec un objet de l'interface crudrepository

Fermé
moses-16 - Modifié le 19 août 2021 à 07:14
 moses-16 - 19 août 2021 à 10:05
package com.shopme.admin.user;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import com.shopme.common.entity.Role;

@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
public class RoleRepositoryTests {
 @Autowired
  private RoleRepository repo;
 
 @Test
 public void testCreateFirstRole(){
  Role roleAdmin = new Role("Admin" , "manage everythings");
  Role savedRole =repo.save(roleAdmin);
  assertThat(savedRole.getId()).isGreaterThan(0); 

}
}

voici le code de ma classe test,lorsque je lance un test junit il me retourne un nullpointerexception sur l'objet repos avec ce message:

java.lang.NullPointerException: Cannot invoke "com.shopme.admin.user.RoleRepository.save(Object)" because "this.repo" is null

2 réponses

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
19 août 2021 à 07:25
Bonjour,

Tu devrais indiquer à JUnit que tu as besoin de démarrer le contexte Spring, comme le vrai programme le fait au démarrage (ce qui peut être long).

Par exemple avec @RunWith(SpringJUnit4ClassRunner.class) ou @ExtendWith(SpringExtension.class) selon ta version de JUnit.
0
quand je fais comme vous dites et que j'ajoute @SpringBootTest
j'ai cette erreur
java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=testCreateFirstRole], {ExactMatcher:fDisplayName=testCreateFirstRole(com.shopme.admin.user.RoleRepositoryTests)], {LeadingIdentifierMatcher:fClassName=com.shopme.admin.user.RoleRepositoryTests,fLeadingIdentifier=testCreateFirstRole]] from org.junit.internal.requests.ClassRequest@2b91004a
 at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:40)
 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:83)
 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:74)
 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:526)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
19 août 2021 à 10:04
Tu devrais reprendre une configuration d'un projet qui fonctionne et t'en inspirer.
Il y a notamment les archetype de Spring Boot, voici un exemple pour data-jpa :
mvn archetype:generate -DarchetypeGroupId=org.springframework.boot -DarchetypeArtifactId=spring-boot-sample-data-jpa-archetype -DgroupId=com.shopme.admin.user -DartifactId=spring-data-jpa -DinteractiveMode=false
cd spring-data-jpa
mvn install

Ça te donnera une base qui fonctionne, aussi bien dans la config src/main que dans la config src/test
0
ok
0