我正在学习如何创建端到端测试,因此我按如下方式编写了伴随对象:
companion object {
lateinit var sDataManager: DataManager
@BeforeClass
@JvmStatic
fun classSetUp() {
sDataManager = DataManager.getInstance()
}
}
测试如下
@Test
fun createNewNote() {
val course = sDataManager.getCourse("java_lang")
val noteTitle = "Test note title"
val noteText = "This is the body of our test note"
onView(withId(R.id.fab)).perform(click())
onView(withId(R.id.spinner_courses)).perform(click())
onData(allOf(instanceOf(CourseInfo::class.java), equalTo(course))).perform(click())
onView(withId(R.id.spinner_courses)).check(matches(withSpinnerText(containsString(course.title))))
onView(withId(R.id.text_note_title)).perform(typeText(noteTitle))
.check(matches(withText(containsString(noteTitle))))
onView(withId(R.id.text_note_text)).perform(typeText(noteText), closeSoftKeyboard())
.check(matches(withText(containsString(noteText))))
val noteIndex = sDataManager.notes.size - 1
val note = sDataManager.notes[noteIndex]
assertEquals(noteTitle, note.title)
assertEquals(noteText, note.text)
assertEquals(course, note.course)
}
除了断言之外的所有内容,我都知道会创建一个新注释,因为 sDataManager.notes 中的大小会增加。如果我在检索最后一个音符val note = notes[noteIndex]
时调试了测试,则在变量部分中会看到以下错误note = {NoteInfo@12151} Method threw 'java.lang.NullPointerException' exception. Cannot evaluate com.example.jaime.notekeeper.mode.NoteInfo.toString()
。实际上,note
中的属性为空。我不知道这个问题是因为我在测试中还是在DataManager中做错了。
顺便说一句,当我运行该应用程序时,所有的工作都按预期进行了,我还具有单元测试来检查注释是否已创建,所有测试都通过了。