在我的 Android 应用程序(用 Kotlin 编写)中,我需要将一些 JSON 转换为 MainObject 哈希映射的字符串。JSON 如下所示:
\n\n{\n "a": {\n "name": "A",\n "some_int": "2",\n "some_string": "string",\n "some_bool": false,\n "some_string_arr": [\n "str1",\n "str2"\n ],\n "sub_obj_arr": [\n {\n "obj_name": "d",\n "some_obj_string": "s"\n }\n ]\n },\n "b": {\n "name": "B",\n "some_int": "4",\n "some_string": "string",\n "some_bool": false,\n "some_string_arr": [\n "str5",\n "str6"\n ]\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我创建了几个对象来帮助解决这个问题。
\n\nclass MainObject {\n @SerializedName("name")\n val name: String? = null\n\n @SerializedName("some_int")\n val someInt: Int? = null\n\n @SerializedName("some_string")\n val someString: String? = null\n\n @SerializedName("some_bool")\n val someBool: …Run Code Online (Sandbox Code Playgroud) 我正在使用协同程序在pull上进行异步调用以进行刷新,如下所示:
class DataFragment : Fragment(), SwipeRefreshLayout.OnRefreshListener {
// other functions here
override fun onRefresh() {
loadDataAsync()
}
private fun loadDataAsync() = async(UI) {
swipeRefreshLayout?.isRefreshing = true
progressLayout?.showContent()
val data = async(CommonPool) {
service?.getData() // suspending function
}.await()
when {
data == null -> showError()
data.isEmpty() -> progressLayout?.showEmpty(null, parentActivity?.getString(R.string.no_data), null)
else -> {
dataAdapter?.updateData(data)
dataAdapter?.notifyDataSetChanged()
progressLayout?.showContent()
}
}
swipeRefreshLayout?.isRefreshing = false
}
}
Run Code Online (Sandbox Code Playgroud)
当我把它放在一台设备上时,这里的一切都很好.我的错误,空白和数据状态都处理得很好,性能也很好.但是,我也试图用Spek进行单元测试.我的Spek测试看起来像这样:
@RunWith(JUnitPlatform::class)
class DataFragmentTest : Spek({
describe("The DataFragment") {
var uut: DataFragment? = null
beforeEachTest {
uut = …Run Code Online (Sandbox Code Playgroud)