具有输入和输出验证的单元测试

时间:2018-12-19 12:38:10

标签: android unit-testing junit kotlin

我对Android单元测试完全陌生。我想在presenter类中为方法编写单元测试。

共享方法需要进行单元测试

 override fun getRequiredUri(uri: Uri): Uri {
    val moduleName = uri.moduleName
    return when (moduleName) {
        "sample" -> getStandardUriFromSampleUri(uri)
        "application" -> getStandardAppLaunchUri(uri)
        else -> {
            return uri
        }
    }
}

private fun getStandardUriFromSampleUri(uri: Uri): Uri {
    var stringUrl = uri.toString()
    stringUrl = stringUrl.replaceFirst("/sample", "")
    var standardUri = Uri.parse(stringUrl)
    val moduleName = uri.moduleName
    if(moduleName == "application"){
        standardUri = getStandardAppLaunchUri(uri)
    }
    return standardUri
}

private fun getStandardAppLaunchUri(uri: Uri): Uri {
    var stringUrl = uri.toString()
    stringUrl = stringUrl.replaceFirst("application", "link/application")
    return  Uri.parse(stringUrl)
}

我正在分享我尝试实现的测试类:

class PresenterTest {

   lateinit var presenter: Presenter
   @Mock
   lateinit var mockActivity: Activity
   @Mock
   lateinit var mockUri: Uri

   @Before
   fun setUp() {
       MockitoAnnotations.initMocks(this)
       presenter = Presenter()
       presenter.view = mockActivity
   }

   @Test
   fun shouldGenerateStandardUriFromNewUri() {
       val input = Uri.parse("https://example.org/sample/account/edit")
       val expectedOutput = Uri.parse("https://example.org/account/edit")
       val output = presenter. getRequiredUri(input)
       assertTrue(output == expectedOutput)
   }

}

此行总是由于类未发现异常而失败。

val output = presenter.getRequiredUri(input)

这是对方法进行单元测试的正确方法吗?如果是,请提出我需要进行的更改。如果否,请提出替代方法。

1 个答案:

答案 0 :(得分:0)

崩溃发生在行

uri.moduleName

ie:从测试类创建Uri对象时,路径段(uri.patheSegments)为空。

解决方案是使用RoboElectricTestRunner运行测试类。

测试类应如下所示:

@Config(constants = BuildConfig::class)
@RunWith(RobolectricTestRunner::class)
class UriInterceptPresenterTest {

 //-----Test cases-----

}