我正在为我的Room Database类编写一个测试用例,并且所有查询的返回类型均为LiveData。这样。
@Query("Select * from location")
LiveData<List<LocationDetails>> getAllRecords();
据我了解,无论我想在代码中使用这些查询什么地方。我将它们与.observables一起使用,因此可以相应地更改我的看法。以及那些可观察的呼叫,请返回列表供我使用。所以我认为它给了我LiveData的价值。与
一样LiveData<List<LocationDetails>>.getvalue()
确实。 (我知道它不是那样,而只是让您了解我的意思。)
因此在编写我的单元测试时。我必须使用查询,但显然没有可观察对象。如果我这样做的话:
LiveData<List<LocationDetails>> parsingObject = mDao.getAllRecords();
这给了我这个错误。
java.lang.NullPointerException
at genesis.com.getlocation.MyDaoTest.validateGetRecord(MyDaoTest.java:70).
但在assertNotNull(parsingObject)上没有错误。
但是,如果我进行查询时没有使用LiveData类型(如下所示)。并在我的测试中使用它。然后,我当然会得到一个可以使用的列表,它运行良好。
List<LocationDetails>;
那么,有人可以告诉我如何使用LiveData类型的方法吗?
Test.class
package genesis.com.getlocation;
import android.arch.lifecycle.LiveData;
import android.arch.persistence.room.Room;
import android.content.Context;
import android.os.Bundle;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@RunWith(AndroidJUnit4.class)
public class MyDaoTest {
private LocationDetails locationDetails = new LocationDetails();
private Database mDb;
private MyDao mDao;
@Before
public void createDb() {
Context context = InstrumentationRegistry.getTargetContext();
mDb = Room.inMemoryDatabaseBuilder(context, Database.class).build();
mDao = mDb.myDao();
}
@After
public void tearDown() throws Exception {
mDb.close();
}
@Test
public void validateInsertRecord(){
JSONObject jsonStringOject= new JSONObject();
try {
jsonStringOject.put("name", "asd");
jsonStringOject.put("address", "asd");
jsonStringOject.put("date", "asd");
jsonStringOject.put("note", "asd");
jsonStringOject.put("radioButtonValue", "asd");
locationDetails.setObject(jsonStringOject.toString());
locationDetails.setLongitude(654654);
locationDetails.setLatitude(564654);
} catch (JSONException e) {
e.printStackTrace();
fail();
}
mDao.insertRecord(locationDetails);
}
@Test
public void validateGetRecord(){
LiveData<List<LocationDetails>> parsingObject = mDao.getAllRecords();
assertNotNull(parsingObject);
Bundle bundle = new Bundle();
for (LocationDetails location : parsingObject.getValue()) {
String ObjectString = location.getObject();
JSONObject json;
try {
json = new JSONObject(ObjectString);
bundle.putString("name",json.getString("name"));
bundle.putString("address",json.getString("address"));
bundle.putString("date",json.getString("date"));
bundle.putString("note",json.getString("note"));
bundle.putString("radioButtonValue",json.getString("radioButtonValue"));
bundle.putString("id", String.valueOf(location.getId()));
bundle.putString("latitude", String.valueOf(location.getLatitude()));
bundle.putDouble("longitude", location.getLongitude());
System.out.println(String.valueOf(location.getLatitude()));
assertEquals(String.valueOf(locationDetails.getLatitude()),bundle.getString("latitude"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}