Android Studio 3.5.3
Kotlin 1.3
Tôi đang cố gắng kiểm tra một số mã đơn giản nhưng tôi vẫn nhận được ngoại lệ sau:
IllegalStateException: gsonWrapper.fromJson<Map…ring, String>>() {}.type) must not be null
Tôi đang sử dụng gián điệp và chế nhạo trả lại để nó sẽ trả về null. Như tôi muốn kiểm tra đường dẫn lỗi.
Không chắc chắn liệu tôi có làm điều gì sai trái với sự bướng bỉnh của mình hay không. Nhưng dường như không thể giải quyết ngoại lệ này.
Sử dụng một lớp bao bọc để bọc thực hiện gson và gián điệp về điều này trong thử nghiệm
public class GsonWrapper implements IGsonWrapper {
private Gson gson;
public GsonWrapper(Gson gson) {
this.gson = gson;
}
@Override public <T> T fromJson(String json, Type typeOf) {
return gson.fromJson(json, typeOf);
}
}
Thực hiện lớp học của tôi đang được thử nghiệm
class MoviePresenterImp(
private val gsonWrapper: IGsonWrapper) : MoviePresenter {
private companion object {
const val movieKey = "movieKey"
}
override fun saveMovieState(movieJson: String) {
val movieMap = serializeStringToMap(movieJson)
when (movieMap.getOrElse(movieKey, {""})) {
/* do something here */
}
}
// Exception return from this method
private fun serializeStringToMap(ccpaStatus: String): Map<String, String> =
gsonWrapper.fromJson<Map<String, String>>(ccpaStatus, object : TypeToken<Map<String, String>>() {}.type) // Exception
}
Lớp kiểm tra thực tế, chỉ cần giữ mọi thứ đơn giản
class MoviePresenterImpTest {
private lateinit var moviePresenterImp: MoviePresenterImp
private val gsonWrapper: GsonWrapper = GsonWrapper(Gson())
private val spyGsonWrapper = spy(gsonWrapper)
@Before
fun setUp() {
moviePresenterImp = MoviePresenterImp(spyGsonWrapper)
}
@Test
fun `should not save any movie when there is an error`() {
// Arrange
val mapType: Type = object : TypeToken<Map<String, String>>() {}.type
whenever(spyGsonWrapper.fromJson<Map<String, String>>("{\"movie\":\"movieId\"}", mapType)).thenReturn(null)
// Act
moviePresenterImp.saveMovieState("{\"movie\":\"movieId\"}")
// Assert here
}
}
Cảm ơn rất nhiều về sựh gợi ý,
non-null
. Tôi nghĩ rằng những gì tôi đang cố gắng đạt được là trả lại một bản đồ có nội dung không có giá trị. Vì vậy, khi nàomovieMap.getOrElse()
sẽ trả về một null. Đó là những gì tôi đã cố gắng để chế giễu. Có filmMap chứa null là điều tôi không biết phải làm thế nào?.