如何在Android单元测试中用模拟数据填充适配器? [英] How to fill adapter with mock data in unit test on Android?
问题描述
在我的应用程序中,我从服务器获取一些数据并显示到RecyslerView
中.
我可以获取数据并填充adapter
并显示到RecyclerView
中,但是我想用 Mockito Test 为此编写Test,然后将adapter
填充到RecyclerView
中.
>
我将此链接用于json: https://api.learn2crack .com/android/jsonandroid/
我写下面的代码,但是我不知道如何为此写 Test .
我的活动"课程:
public class MainActivity extends AppCompatActivity {
private RecyclerView list;
private Context context;
private ApiServices apiServices;
private List<Android> model = new ArrayList<>();
private RecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
apiServices = ApiClient.getClient().create(ApiServices.class);
list = findViewById(R.id.list);
list.setLayoutManager(new LinearLayoutManager(context));
list.setHasFixedSize(true);
adapter = new RecyclerAdapter(model);
list.setAdapter(adapter);
Call<AndroidResponse> call = apiServices.getAndroid();
call.enqueue(new Callback<AndroidResponse>() {
@Override
public void onResponse(Call<AndroidResponse> call, Response<AndroidResponse> response) {
if (response.isSuccessful()) {
if (response.body() != null) {
model.clear();
model.addAll(response.body().getAndroid());
adapter.notifyDataSetChanged();
}
}
}
@Override
public void onFailure(Call<AndroidResponse> call, Throwable t) {
}
});
}
}
我的适配器类:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private List<Android> model;
public RecyclerAdapter(List<Android> model) {
this.model = model;
}
@NonNull
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_list, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerAdapter.ViewHolder holder, int position) {
holder.name.setText(model.get(position).getName());
holder.version.setText(model.get(position).getVer());
holder.api.setText(model.get(position).getApi());
}
@Override
public int getItemCount() {
return model.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView name, version, api;
public ViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.rowName);
version = itemView.findViewById(R.id.rowVersion);
api = itemView.findViewById(R.id.rowApi);
}
}
}
我的测试班级:
@RunWith(AndroidJUnit4.class)
public class MainActivityTest extends InstrumentationTestCase {
@Rule
public ActivityTestRule<MainActivity> activityTest = new ActivityTestRule<>(MainActivity.class, true, false);
private MockWebServer mockWebServer;
@Before
public void setUp() throws Exception {
super.setUp();
mockWebServer = new MockWebServer();
mockWebServer.start();
injectInsrumentation(InstrumentationRegistry.getInstrumentation());
AppConstants.BASE_URL = mockWebServer.url("/").toString();
}
@Test
public void setupAndroidListAdapterTest() throws Exception {
}
@After
public void tearDown() throws Exception {
mockWebServer.shutdown();
}
}
我在 json 上方保存了asset
文件夹.
我不知道如何在setupAndroidListAdapterTest()
中编写测试以填充adapter
并在recyclerView
中显示模拟数据.
我该怎么办?
模拟此方法以用假数据model.addAll(response.body().getAndroid());
In my application I get some data from server and show into RecyslerView
.
I can get data and fill adapter
and show into RecyclerView
, but I want write Test for this with Mockito Test and fill adapter
for show into RecyclerView
.
I use this link for json : https://api.learn2crack.com/android/jsonandroid/
I write below codes but I don't know how can I write Test for this.
My Activity class :
public class MainActivity extends AppCompatActivity {
private RecyclerView list;
private Context context;
private ApiServices apiServices;
private List<Android> model = new ArrayList<>();
private RecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
apiServices = ApiClient.getClient().create(ApiServices.class);
list = findViewById(R.id.list);
list.setLayoutManager(new LinearLayoutManager(context));
list.setHasFixedSize(true);
adapter = new RecyclerAdapter(model);
list.setAdapter(adapter);
Call<AndroidResponse> call = apiServices.getAndroid();
call.enqueue(new Callback<AndroidResponse>() {
@Override
public void onResponse(Call<AndroidResponse> call, Response<AndroidResponse> response) {
if (response.isSuccessful()) {
if (response.body() != null) {
model.clear();
model.addAll(response.body().getAndroid());
adapter.notifyDataSetChanged();
}
}
}
@Override
public void onFailure(Call<AndroidResponse> call, Throwable t) {
}
});
}
}
My Adapter class :
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private List<Android> model;
public RecyclerAdapter(List<Android> model) {
this.model = model;
}
@NonNull
@Override
public RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_list, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerAdapter.ViewHolder holder, int position) {
holder.name.setText(model.get(position).getName());
holder.version.setText(model.get(position).getVer());
holder.api.setText(model.get(position).getApi());
}
@Override
public int getItemCount() {
return model.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView name, version, api;
public ViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.rowName);
version = itemView.findViewById(R.id.rowVersion);
api = itemView.findViewById(R.id.rowApi);
}
}
}
My Test class :
@RunWith(AndroidJUnit4.class)
public class MainActivityTest extends InstrumentationTestCase {
@Rule
public ActivityTestRule<MainActivity> activityTest = new ActivityTestRule<>(MainActivity.class, true, false);
private MockWebServer mockWebServer;
@Before
public void setUp() throws Exception {
super.setUp();
mockWebServer = new MockWebServer();
mockWebServer.start();
injectInsrumentation(InstrumentationRegistry.getInstrumentation());
AppConstants.BASE_URL = mockWebServer.url("/").toString();
}
@Test
public void setupAndroidListAdapterTest() throws Exception {
}
@After
public void tearDown() throws Exception {
mockWebServer.shutdown();
}
}
I saved above json into asset
folder.
I don't know how can I write test into setupAndroidListAdapterTest()
for fill adapter
and show mock data into recyclerView
.
How can I do it?
Mock this Method to fill your Model with fake Data model.addAll(response.body().getAndroid());
这篇关于如何在Android单元测试中用模拟数据填充适配器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!