我在Bitbucket中有以下项目:https://bitbucket.org/ali-rezaei/storytel/src/master/
我有以下unitTest:
<div class="img-one">
<img class="alignnone size-full wp-image-1303" src="image-source" alt="" width="850" height="1250" />
<div class="adventure-link">
<a href="page-link">Topic</a>
</div>
</div>
这是结果:
@RunWith(MockitoJUnitRunner::class)
class MainViewModelTest {
@get:Rule
var rule: TestRule = InstantTaskExecutorRule()
@Mock
private lateinit var api: StorytelService
private lateinit var viewModel: MainViewModel
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}
@Test
fun loadPosts() {
val networkPhoto = NetworkPhoto(1, 1, "title", "url", "thumbnailUrl")
`when`(api.getPhotos()).thenReturn(Observable.just(listOf(networkPhoto)))
val networkPost = NetworkPost(1, 1, "title", "body")
`when`(api.getPosts()).thenReturn(Observable.just(listOf(networkPost)))
// Make the sure that all schedulers are immediate.
val schedulerProvider = ImmediateSchedulerProvider()
viewModel = MainViewModel(schedulerProvider, api)
val observer = LoggingObserver<List<Post>>()
viewModel.posts.observeForever(observer)
with(observer) {
assertThat(this, `is`(notNullValue()))
assertThat(this.value?.size, `is`(1))
}
}
/**
* simple observer that logs the latest value it receives
*/
private class LoggingObserver<T> : Observer<T> {
var value: T? = null
override fun onChanged(t: T?) {
this.value = t
}
}
}
这是MainViewModel类:
java.lang.AssertionError:
Expected: is <1>
but: was null
Expected :is <1>
Actual :null
如何解决?
答案 0 :(得分:0)
问题是由以下原因引起的:
val networkPhoto = networkPhotos[Random().nextInt(networkPhotos.size - 1)]
由于networkPhotos
列表中只有一张照片,因此代码称为Random().nextInt(0)
。
查看nextInt(int bound)
documentation,您会发现零不是有效的参数,因此,抛出了IllegalArgumentException
。
在调用nextInt
之前,应清除参数。