【发布时间】:2019-02-19 14:17:52
【问题描述】:
我正在尝试为AlbumsController 创建一个测试用例,它从网络中获取数据并对其进行解析。
AlbumService:负责网络调用和获取数据。 (假设它可以是任何执行一些异步任务并相应地给出回调以避免“服务器”特定的模拟解决方案)
public class AlbumsController {
public void getAlbums(final ServiceCallback<AlbumsWrapper> albumsServiceCallback) {
new AlbumsService().fetchAlbums(new ServiceCallback<NetworkResponse>() {
@Override
public void onSuccess(NetworkResponse response) {
// parse response
}
@Override
public void onFailure(NetworkResponse error) {
// do something for Failure
}
});
}
public class AlbumControllerTest {
@Mock
private ServiceCallback<NetworkResponse> serviceCallback;
@Captor
private ArgumentCaptor<ServiceCallback<AlbumsWrapper>> albumsWrapper;
@Captor
private ArgumentCaptor<ServiceCallback<NetworkResponse>> networkResponseArgumentCaptor;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void parseAlbums_EmptyList_ReturnsTrue() {
// below are different ways I am trying with no success so far.
AlbumsController albumsController = new AlbumsController();
albumsController.getAlbums(albumsWrapper.capture());
NetworkResponse response = new NetworkResponse();
networkResponseArgumentCaptor.capture();
networkResponseArgumentCaptor.getValue().onSuccess(response);
}
}
目标:
- 在
getAlbums方法中模拟AlbumService,这样我就可以使用我的测试数据作为参数调用onSuccess(),而不是从服务器获取数据。是否可以解析后获取列表,以便我可以根据列表中的数据assert? - 我不想将负责解析的代码移至某个方法并将其公开。我的目的是了解如何处理这种情况。
- 如果在 TDD 中需要处理代码重构,则打开该代码重构。
- 感谢您提供完整的解决方案或寻找两者的指针。
库
- mockito-core:2.2.9
- junit:4.12
【问题讨论】:
-
可能值得看看 okhttp 的 MockWebServer 并让它返回您期望的 JSON
标签: java android unit-testing junit mockito