안드로이드에서 테스트합니다.룸 데이터베이스 테스트 @Insert
소개하다.
소스 코드
비디오 버전
비디오 버전HERE을 찾을 수 있습니다.
경고!
스레드 및 프로세스
2) 스레드
1) 프로세스
2) 스레드
Threads exist within a process and every process has at least one thread.
루틴 공유 프로세스의 자원으로 메모리를 포함한다.이는 효율적이지만 문제가 있을 수 있는 의사소통을 실현하는 데 도움이 된다.Android의 프로세스 및 스레드
메인 라인
main
라는 이름의 애플리케이션에 실행 스레드가 생성됩니다.주 라인은 사건을 적당한 사용자에게 분배하는 것을 책임지기 때문에 매우 중요하다.또한 Android UI 키트의 구성 요소 (작은 위젯과 보기 패키지에서 온 구성 요소) 와 응용 프로그램이 상호 작용하는 스레드입니다.현재, 메인 라인의 메인 라인을 처리할 때, 두 가지 간단한 규칙을 시종일관 따라야 한다. worker threads
작업 스레드
테스트 데이터베이스 만들기
public class TestDatabase {
// should be an instance of your real world database
private volatile CalfRoomDatabase calfDatabase;
}
volatile
키워드는 메모리 일치성 오류의 위험을 제거하는 데 사용됩니다.volatile 키워드HERE에 대한 더 많은 정보를 읽습니다.내 이름 약속CalfRoomDatabase
을 무시하고 방 데이터베이스에서 이루어진 이름으로 바꿉니다.이제 배경 스레드(작업 스레드)를 계속 만듭니다작업 스레드 만들기
public class TestDatabase {
// should be an instance of your real world database
private volatile CalfRoomDatabase calfDatabase;
private static final int NUMBER_OF_THREADS = 4;
public static final ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);
}
fixed thread pool
이다.고정 스레드 탱크는 특정 수량의 스레드(작업 스레드)를 포함한다.그런 다음 고정 풀에 비동기식 작업을 실행하고, 고정 풀은 작업 스레드를 사용할 수 있을 때까지 내부 대기열을 통해 작업을 저장합니다.만약 작업 라인을 사용할 수 없다면, 작업이 자유롭게 실행될 때까지 기다릴 것입니다.우리는 다음 문장으로 고정된 스레드 탱크를 만듭니다: public static final ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);
메모리 데이터베이스
ONLY
으로 메모리 데이터베이스를 만들 것입니다.이러한 데이터베이스는 메모리 데이터베이스(장치)에 정보를 저장하고 프로세스가 종료되면 사라집니다.이것은 테스트가 끝날 때 데이터베이스도 멈춘다는 것을 의미한다.@After
및 @Before
주석을 통해 이를 실현할 수 있습니다.예상한 바와 같이, Before
로 표시된 모든 방법은 테스트 전에 실행되고, @After
로 표시된 방법은 테스트 후에 실행됩니다.public class TestDatabase {
//... still include other methods
@Before
public void init(){
calfDatabase = Room.inMemoryDatabaseBuilder(
ApplicationProvider.getApplicationContext(),
CalfRoomDatabase.class
).build();
}
@After
public void finish(){
calfDatabase.close();
}
}
@Before
방법은 우리가 데이터베이스를 만드는 데 필요한 모든 코드를 포함한다.이것은 매번 테스트를 하기 전에 새로운 데이터베이스를 만들 것이라는 것을 의미한다.@After
방법은 각 방법 이후에 실행되며 호출.close()
을 통해 데이터베이스를 삭제합니다칼.
public class TestDatabase {
//... still include other methods
public CalfDao getCalfDao(){
// getCalfDao() implemented by Room
return calfDatabase.getCalfDao();
}
}
calfDatabase
실제 테스트!!!
DAOTest
라는 새 클래스를 만들고 확장합니다TestDatabase
.public class DAOTest extends TestDatabase {
}
public class DAOTest extends TestDatabase {
@Test
public void insertTest() throws Exception{
}
}
@Test
기호는 Junit에서 왔으며 이 방법은 테스트에 사용될 것임을 시스템에 나타냅니다.이것은 @Before
와 @After
방법이 실행된다는 것을 의미한다.그리고 삽입할 테스트 대상과 성공적으로 삽입된 후에 되돌아오는 테스트 값을 만들 수 있습니다.Calf calfTest1 = new Calf(1,"test-1", "TEST 1", new Date(),"Bull","test-1");
int testingReturnValue = 1;
get()
으로만 결과를 검색할 수 있습니다.public class DAOTest extends TestDatabase {
@Test
public void insertTest() throws Exception{
Future<Integer> calf = CalfDatabaseTest
.databaseWriteExecutor.submit(new Runnable() {
@Override
public void run() {
getCalfDao().insert(calfTest1);
}
}, testingReturnValue); //RETURN A FUTURE OBJECT
int returningCalfValue = calf.get();
}
}
testingReturnValue
는 정수이기 때문이다.다음은 고정 스레드 풀CalfDatabaseTest.databaseWriteExecutor
에 액세스합니다.이것은 우리로 하여금 업무 라인에 접근할 수 있게 하고, 우리는 비동기적인 임무를 그것들에게 분배할 수 있게 한다.우리는submit 방법을 통해 작업을 만들고 Runnable .submit(new Runnable(),testingReturnValue)
을 제공합니다. Runnable에 우리가 제공한 반환값이 없기 때문입니다. testingReturnValue
Runnable에서, 우리는 run
방법을 다시 쓰고, 작업 라인에서 완성하고자 하는 임무를 호출합니다.이 코드는 비동기적이기 때문에, 우리는 값을 막고 기다려야 한다.우리는 get()
방법을 사용하여 이 점을 실현한다.get()
방법은 되돌아오는 값을 얻을 때까지 막힙니다.단언
returningCalfValue
와 testingReturnValue
가 같다고 단언할 수 있기 때문에 삽입에 성공했다는 것을 나타낸다.Assert.assertEquals(testingReturnValue,returningCalfValue);
결론
Reference
이 문제에 관하여(안드로이드에서 테스트합니다.룸 데이터베이스 테스트 @Insert), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theplebdev/testing-in-android-testing-the-room-database-3fj8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)