NullPointerException : Mockito 및 JUnit, Kotlin과 함께 Ebean을 사용하는 DAO 클래스 테스트

팀파 23

그래서 kotlin으로 작성된 아주 기본적인 모델, dao 및 컨트롤러 클래스가 있습니다. Ebean을 사용하여 서비스와 데이터를 연결하고 있습니다. 내 DAO 클래스에 대한 단위 테스트를 만들려고합니다. 내가 이해하기 위해 단위 테스트는 실제로 DB 연결을 호출해서는 안되며 일부는 내 스택을 DBUnit과 결합하여 이러한 테스트를 수행했다는 것을 읽었습니다.

그러나 Mockito로 다른 접근 방식을 선택하고 여기에 설명 된대로 수행하는 방법에 대한 ebean 지침을 따르려고했습니다. https://ebean.io/docs/setup/testing 모의 데이터베이스 개체를 만들고 다음으로 테스트를 실행할 수있었습니다. getBeanId (null) 함수 그러나 내가 변경하려고 할 때

when(dbmock.getBeanId(null)).thenReturn(someBeanId)

...에

when(dbmock.find(PracticeSession::class.java).where(Expr.eq("id", 1)).findOne()!!).thenReturn(mockPracticeSession)

이 오류가 발생합니다. java.lang.NullPointerException: Cannot invoke "io.ebean.Query.where(io.ebean.Expression)" because the return value of "io.ebean.Database.find(java.lang.Class)" is null

그래서 내가 이것을 계속해야하거나 내가 뭘 잘못하고 있는지 조언이 있습니까? 나에게 dbmock은 일부 함수 만 작동하기 때문에 실제 DB 객체와 동일하지 않은 것 같습니다. 즉, getBeanId는 작동하지만 find ()는 작동하지 않습니다. 무언가로 초기화해야합니까? DAO 클래스에서 DB.find ()가 호출 될 때도 문제가 있다고 가정합니다.

여기 내 모델이 있습니다.


import io.ebean.Model
import io.ebean.annotation.NotNull
import org.flywaydb.core.internal.configuration.ConfigUtils.TABLE
import java.util.*
import javax.persistence.*

@Entity
class PracticeSession : Model() {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Long = 0

    var name: String? = null

    @NotNull
    var date: Date? = null

    @NotNull
    var duration = 0

    @ManyToOne(optional = false)
    var location: Location? = null

    @ManyToOne(optional = false)
    var climber: Climber? = null
}

다오,


import io.ebean.DB
import io.ebean.Expr
import model.PracticeSession
import utils.ApplicationException

class PracticeSessionDAO {
    @Throws(ApplicationException::class)
    fun getPracticeSession(practice_session_id: Int): PracticeSession {
        try {
            return DB.find(PracticeSession::class.java).where(Expr.eq("id", practice_session_id)).findOne()!!
        } catch (e:Exception){
            throw ApplicationException("PracticeSession with id: $practice_session_id was not found. Returned error: $e")
        }

    }

}

및 테스트 클래스

package dao.sqlserver

import io.ebean.DB
import io.ebean.Database
import io.ebean.Expr
import io.ebean.MockiEbean
import model.PracticeSession
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Test

import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.BeforeEach
import org.mockito.Mockito
import org.mockito.Mockito.`when`
import io.ebeaninternal.server.core.DefaultServer
import org.mockito.InjectMocks

internal class PracticeSessionDAOTestMock {

    lateinit var defaultServer : Database
    lateinit var restoredServer : Database


    @BeforeEach
    fun setUp() {

        defaultServer = DB.getDefault()
        assertTrue(defaultServer is DefaultServer)

    }

    @AfterEach
    fun tearDown() {
        restoredServer = DB.getDefault()
        assertTrue(restoredServer is DefaultServer)
    }

    @Test
    fun getPracticeSession() {
        val dbmock = Mockito.mock(Database::class.java)
        val mockPracticeSession = PracticeSession()
        mockPracticeSession.id=1
        `when`(dbmock.find(PracticeSession::class.java).where(Expr.eq("id", 1)).findOne()!!).thenReturn(mockPracticeSession)
        //val someBeanId = java.lang.Long.valueOf(47L)
        //`when`(dbmock.getBeanId(null)).thenReturn(someBeanId)
        val mockiEbean = MockiEbean.start(dbmock)
        try{
            val mockServer = DB.getDefault()
            //val beanId: Any = mockServer.getBeanId(null)
            //assertEquals(someBeanId, beanId);
            val practiceSessionDAO = PracticeSessionDAO()
            val practiceSession = practiceSessionDAO.getPracticeSession(1)
            assertEquals(1, practiceSession.id)
        } finally {
            mockiEbean.restoreOriginal()
        }

    }
}
팀파 23

이 문제를 해결할 수있었습니다. 이것은 올바른 방향을 가리 켰습니다 .Mockito-메서드를 스터 빙 할 때 NullpointerException

다음은 수정 된 테스트 클래스입니다. 나는 단지 많은 클래스와 함수를 모의하고 스텁해야했다.

package dao.sqlserver

import io.ebean.*
import model.PracticeSession
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.BeforeEach
import org.mockito.Mockito
import org.mockito.Mockito.`when`
import io.ebeaninternal.server.core.DefaultServer


internal class PracticeSessionDAOTestMock {

    lateinit var defaultServer : Database
    lateinit var restoredServer : Database



   @BeforeEach
    fun setUp() {

        defaultServer = DB.getDefault()
        assertTrue(defaultServer is DefaultServer)

    }

    @AfterEach
    fun tearDown() {
        restoredServer = DB.getDefault()
        assertTrue(restoredServer is DefaultServer)
    }

    @Test
    fun getPracticeSession() {
        val dbmock = Mockito.mock(Database::class.java)
        val mockPracticeSession = PracticeSession()
        mockPracticeSession.id=1
        val mockQuery = Mockito.mock(Query::class.java)
        val mockExprFactory = Mockito.mock(ExpressionFactory::class.java)
        `when`(dbmock.find(PracticeSession::class.java)).thenReturn(mockQuery as Query<PracticeSession>?)
        `when`(dbmock.getExpressionFactory()).thenReturn(mockExprFactory)
        `when`(mockQuery.where(mockExprFactory.eq("id",1))).thenReturn(mockQuery)
        `when`(mockQuery.findOne()).thenReturn(mockPracticeSession)

        val mockiEbean = MockiEbean.start(dbmock)
        try{
            val practiceSessionDAO = PracticeSessionDAO()
            val practiceSession = practiceSessionDAO.getPracticeSession(1)
            assertEquals(1, practiceSession.id)
        } finally {
            mockiEbean.restoreOriginal()
        }

    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

테스트 이미지 mockito 및 JUnit을 사용

분류에서Dev

Mockito를 사용하여 Robospice 및 Retrofit과 함께 API를 테스트하는 방법은 무엇입니까?

분류에서Dev

createCriteria에서 Mockito 테스트 DAO get NullPointerException

분류에서Dev

Junit을 사용하여 Spring MVC 및 Hibernate의 DAO 계층 및 서비스 계층 테스트 단계

분류에서Dev

Junit을 사용하여 Spring MVC 및 Hibernate의 DAO 계층 및 서비스 계층 테스트 단계

분류에서Dev

JUnit 및 Mockito로 사용자 지정 JsonSerializer를 테스트하는 방법

분류에서Dev

Mockito 및 Spring MVC로 떨어지는 Junit 테스트 케이스

분류에서Dev

Kotlin 코 루틴 및 흐름을 사용한 Room DAO의 테스트 방법

분류에서Dev

Mockito도 PowerMockito과 함께 할 수 없습니다 단위 테스트 자바 코드를 사용하는 반사

분류에서Dev

Listener 클래스에 대한 mockito junit을 작성하는 방법

분류에서Dev

BeautifulSoup과 함께 Python을 사용하여 숫자 추출 (다중 범위 및 클래스)

분류에서Dev

Python과 함께 Selenium을 사용하여 div 클래스에서 텍스트를 추출하는 방법

분류에서Dev

Junit 및 mockito로 Sum Double 값을 테스트하는 방법은 무엇입니까?

분류에서Dev

Mockito와 함께 greendao를 사용하여 Android 앱 테스트

분류에서Dev

클래스의 asyncio 및 기존 이벤트 루프와 함께 Python의 웹 소켓을 사용하는 방법

분류에서Dev

JUnit을 @Rule을 사용하여 Mockito로 테스트 매개 변수화?

분류에서Dev

Mockito를 사용하여 테스트 할 클래스에서 throws 절을 테스트하는 방법

분류에서Dev

함께 completablefuture 및 스트림을 사용하는 방법

분류에서Dev

어떻게 나머지 컨트롤러, 서비스 및 springboot를 사용하여 DAO 계층에 대한 JUnit 테스트 케이스를 작성하는?

분류에서Dev

서비스 및 DAO 계층에 대한 JUNIT 테스트

분류에서Dev

JUnit을 Mockito 테스트 : 제로의 상호 작용

분류에서Dev

junit을 작성할 때 Mockito 용 테스트 스위트를 만드는 방법

분류에서Dev

파생 클래스 및 메서드 호출과 함께 mypy를 사용하는 방법은 무엇입니까?

분류에서Dev

상속 및 템플릿과 함께 친구 클래스를 사용하는 방법

분류에서Dev

Junit을 사용하여 SQLite 쓰기 및 읽기 테스트

분류에서Dev

Pact 및 JUnit을 사용하여 SSL 보안 API 테스트

분류에서Dev

JRadioButton과 함께 Java Preferences 클래스를 사용하는 방법

분류에서Dev

하나의 자바 클래스에 명령 줄에서의 JUnit과 컴파일 및 실행 테스트

분류에서Dev

InvalidUseOfMatchersException () 메소드는 JUnit을 테스트중인 카피하지 않고 CloneNotSupportedException 강제 mockito를 사용할 때

Related 관련 기사

  1. 1

    테스트 이미지 mockito 및 JUnit을 사용

  2. 2

    Mockito를 사용하여 Robospice 및 Retrofit과 함께 API를 테스트하는 방법은 무엇입니까?

  3. 3

    createCriteria에서 Mockito 테스트 DAO get NullPointerException

  4. 4

    Junit을 사용하여 Spring MVC 및 Hibernate의 DAO 계층 및 서비스 계층 테스트 단계

  5. 5

    Junit을 사용하여 Spring MVC 및 Hibernate의 DAO 계층 및 서비스 계층 테스트 단계

  6. 6

    JUnit 및 Mockito로 사용자 지정 JsonSerializer를 테스트하는 방법

  7. 7

    Mockito 및 Spring MVC로 떨어지는 Junit 테스트 케이스

  8. 8

    Kotlin 코 루틴 및 흐름을 사용한 Room DAO의 테스트 방법

  9. 9

    Mockito도 PowerMockito과 함께 할 수 없습니다 단위 테스트 자바 코드를 사용하는 반사

  10. 10

    Listener 클래스에 대한 mockito junit을 작성하는 방법

  11. 11

    BeautifulSoup과 함께 Python을 사용하여 숫자 추출 (다중 범위 및 클래스)

  12. 12

    Python과 함께 Selenium을 사용하여 div 클래스에서 텍스트를 추출하는 방법

  13. 13

    Junit 및 mockito로 Sum Double 값을 테스트하는 방법은 무엇입니까?

  14. 14

    Mockito와 함께 greendao를 사용하여 Android 앱 테스트

  15. 15

    클래스의 asyncio 및 기존 이벤트 루프와 함께 Python의 웹 소켓을 사용하는 방법

  16. 16

    JUnit을 @Rule을 사용하여 Mockito로 테스트 매개 변수화?

  17. 17

    Mockito를 사용하여 테스트 할 클래스에서 throws 절을 테스트하는 방법

  18. 18

    함께 completablefuture 및 스트림을 사용하는 방법

  19. 19

    어떻게 나머지 컨트롤러, 서비스 및 springboot를 사용하여 DAO 계층에 대한 JUnit 테스트 케이스를 작성하는?

  20. 20

    서비스 및 DAO 계층에 대한 JUNIT 테스트

  21. 21

    JUnit을 Mockito 테스트 : 제로의 상호 작용

  22. 22

    junit을 작성할 때 Mockito 용 테스트 스위트를 만드는 방법

  23. 23

    파생 클래스 및 메서드 호출과 함께 mypy를 사용하는 방법은 무엇입니까?

  24. 24

    상속 및 템플릿과 함께 친구 클래스를 사용하는 방법

  25. 25

    Junit을 사용하여 SQLite 쓰기 및 읽기 테스트

  26. 26

    Pact 및 JUnit을 사용하여 SSL 보안 API 테스트

  27. 27

    JRadioButton과 함께 Java Preferences 클래스를 사용하는 방법

  28. 28

    하나의 자바 클래스에 명령 줄에서의 JUnit과 컴파일 및 실행 테스트

  29. 29

    InvalidUseOfMatchersException () 메소드는 JUnit을 테스트중인 카피하지 않고 CloneNotSupportedException 강제 mockito를 사용할 때

뜨겁다태그

보관