使用Mockito对外部REST API调用进行Android单元测试
我是Android中JUnit测试用例的新手。我听说通过使用Mockito我们可以很容易地实现 我的Android类对RESTAPI服务(改型)进行外部调用,该服务返回JSON响应。我必须模拟该响应(硬编码JSON)并编写测试用例 请分享你的想法如何实现这一点 我能够做到 用一段代码更新使用Mockito对外部REST API调用进行Android单元测试,android,junit,mockito,retrofit2,android-testing,Android,Junit,Mockito,Retrofit2,Android Testing,我是Android中JUnit测试用例的新手。我听说通过使用Mockito我们可以很容易地实现 我的Android类对RESTAPI服务(改型)进行外部调用,该服务返回JSON响应。我必须模拟该响应(硬编码JSON)并编写测试用例 请分享你的想法如何实现这一点 我能够做到 用一段代码更新 class GenerateTripViewModelTest { @Mock private lateinit var mockRepository: GenerateTripReposit
class GenerateTripViewModelTest {
@Mock
private lateinit var mockRepository: GenerateTripRepository
private val schedulerProvider = SchedulerProvider(Schedulers.trampoline(), Schedulers.trampoline())
private lateinit var generateTripViewModel: GenerateTripViewModel
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
generateTripViewModel = GenerateTripViewModel(mockRepository, schedulerProvider)
}
@Test
fun SearchSuccessCase() {
val tripReq = GenerateTripReqModel(ArrayList<String>(),"123","xxxx","xxxx")
Mockito.`when`(mockRepository.generateTrip(tripReq)).thenReturn(Observable.just(GenerateTripResModel("")))
val testObserver = TestObserver<GenerateTripResModel>()
generateTripViewModel.generateTrip(tripReq).subscribe(testObserver)
testObserver.assertNoErrors()
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
class GenerateTripViewModel @Inject constructor(private val generateTripRepository: GenerateTripRepository,private val schedulerProvider: SchedulerProvider) : ViewModel() {
fun generateTrip(reqModel: GenerateTripReqModel) = generateTripRepository.generateTrip(reqModel)
}
@Singleton
class GenerateTripRepository @Inject constructor(
private val apiServices: ApiServices, private val context: Context,
private val appExecutors: AppExecutors = AppExecutors()) {
/**
* Generate Trip
*/
fun generateTrip(reqModel: GenerateTripReqModel): Observable<GenerateTripResModel> = apiServices.generateTrip(reqModel)
}
@Singleton
类GenerateTripPrepository@Inject构造函数(
专用val apiServices:apiServices,专用val上下文:上下文,
私有val appExecutors:appExecutors=appExecutors()){
/**
*生成行程
*/
fun generateTrip(reqModel:GenerateTripReqModel):可观察=apiServices.generateTrip(reqModel)
}
类测试{
@嘲弄
lateinit var redditApiService:redditApiService
lateinit var postSettingsViewModel:postSettingsViewModel
@以前
趣味设置(){
initMocks(本)
postSettingsViewModel=postSettingsViewModel(redditApiService,userRepo)
}
@试验
有趣的{
Mockito.`when`(redditApiService.getSubreddits(“asd”))。然后返回(单
.just(SubredditResponse)(列表(Subreddit(“第一”;))))
//做你的测试
}
}
您可以使用viewmodel或presenter并在那里传递api服务。通过mockito,您可以指定函数调用及其返回值<代码>Mockito.when(api.get())。然后返回(new Result())您可以查看谷歌示例: 您可以使用产品风格来模拟您的响应或用户MockWebServer库,或者使用从资产返回json的实现替换您的改型接口
upd:我误解了这个问题。我同意Phowner Biring的观点您能否描述更多,无法理解您的代码。如果可能,您能否分享相关的示例或文章。
class Test{
@Mock
lateinit var redditApiService: RedditApiService
lateinit var postSettingsViewModel: PostSettingsViewModel
@Before
fun setUp() {
initMocks(this)
postSettingsViewModel = PostSettingsViewModel(redditApiService, userRepo)
}
@Test
fun testApi(){
Mockito.`when`(redditApiService.getSubreddits("asd")).thenReturn(Single
.just<SubredditResponse>(SubredditResponse(listOf(Subreddit("first")))))
//make your tests
}
}