модульное тестирование с проверкой ввода и вывода - PullRequest
0 голосов
/ 19 декабря 2018

Я совершенно новичок в модульном тестировании в Android.Я хочу написать модульный тест для метода в моем классе докладчика.

Совместное использование методов должно быть покрыто модульным тестом

 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 голосов
/ 20 декабря 2018

Сбой происходит в строке

uri.moduleName

, т.е.: сегменты пути (uri.patheSegments) пусты при создании объекта Uri из тестового класса.

Решение состоит в том, чтобыЗапустите тестовый класс с RoboElectricTestRunner.

То есть тестовый класс должен выглядеть следующим образом:

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

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...