2017-03-10 11 views
0

すべてのテストが一度だけ実行される前にDBに挿入する必要があります。これが私がsetUp()メソッドでやろうとしていることです。しかし、nullpointerを得た。スプリングブートバージョンは1.5.1です。リリース。何か案は?BeforeClass(春のブート)のNullPointerException

public interface UserRepository extends JpaRepository<User, String> {} 

スタックトレース:

java.lang.NullPointerException 
    at com.company.myapp.get.GetUserTest.setUp(GetUserTest.java:58) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:237) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
+0

インジェクションは 'のために動作しません。ここにお読みくださいそのようなものは注入されないので、許可されていても '@ BeforeClass'では利用できません。 –

+0

そのような場合に@BeforeClassの適切な置き換えは何ですか? – IKo

答えて

0

@Entity 
@Table(schema="test", name = "TBL_USERS") 
@AllArgsConstructor 
@Builder 
@Data public class User implements Persistable<String>{ 

    @Id 
    @Column(name = "ID", columnDefinition = "decimal") 
    private String id; 

    @Column(name = "NAME", columnDefinition = "char", nullable = false) 
    private String name; 

    ... 
    } 

これはインタフェースである:これは私のエンティティクラスが

@Autowired 
    private static UserRepository userRepository; 

    @BeforeClass 
    public static void setUp() { 
     User user = User. 
       .builder() 
       .id(10) 
       .name("John") 
       .build(); 

     userRepository.deleteAll(); //NullPointerException at this step 
     userRepository.save(user); 
    } 

です: これは私のテストクラスからです

あなたのように、あなたのbeforeClassメソッド内の何かにuserRepositoryを初期化してから、その上でdeleteAll()を呼び出してください。だから、あなたはあなたのNPEを手に入れました。

0

テストクラスに@RunWith(SpringRunner.class)と注釈が付けられていますか?

+0

は私が{ ... } ' – IKo

+0

を見てもらえ ' @RunWith(SpringRunner.class) @SpringBootTestこの注釈を持つ抽象クラス(クラス= MyServiceStarter.class) パブリック抽象クラスAbstractIntegrationTestからそれを拡張しますJPAスライステストで:http://zoltanaltfatter.com/2016/04/16/trying-out-spring-boot-1.4.0-new-features-and-enhancements/ –

0

あなたはこのような何かをする必要があります。..

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class XXXTest { 

    @Autowired 
    private UserRepository userRepository; 

    @Before 
     public void setUp() { 
      ...... 
    } 
+0

ありがとう。そのような場合、setUp()は各テストの前に実行されます。そして、私はそれがすべてのテストの前に一度だけ実行されることを望みます。 – IKo

関連する問題