Java 如何将Mockito测试与recyclerView一起使用?
在我的应用程序中,我从服务器获取一些数据并显示在Java 如何将Mockito测试与recyclerView一起使用?,java,android,android-recyclerview,android-espresso,android-testing,Java,Android,Android Recyclerview,Android Espresso,Android Testing,在我的应用程序中,我从服务器获取一些数据并显示在RecyslerView中 我可以获取数据并填充适配器并显示到回收视图,但我想用Mockito Test为此编写测试,并填充适配器以显示到回收视图 我将此链接用于json: public class MainActivity extends AppCompatActivity { private RecyclerView list; private Context context; private ApiServices
RecyslerView
中我可以获取数据并填充
适配器
并显示到回收视图
,但我想用Mockito Test为此编写测试,并填充适配器
以显示到回收视图
我将此链接用于json:
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 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类MainActivity扩展了AppCompatActivity{
私人回收站查看列表;
私人语境;
私营安老院服务;;
私有列表模型=新的ArrayList();
专用回收适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
上下文=这个;
apiServices=ApiClient.getClient().create(apiServices.class);
列表=findViewById(R.id.list);
list.setLayoutManager(新的LinearLayoutManager(上下文));
list.setHasFixedSize(true);
适配器=新的回收适配器(型号);
list.setAdapter(适配器);
Call Call=apiServices.getAndroid();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
if(response.body()!=null){
model.clear();
model.addAll(response.body().getAndroid());
adapter.notifyDataSetChanged();
}
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的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);
}
}
}
@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest extends InstrumentationTestCase {
@Rule
public ActivityTestRule<MainActivity> mainActivityTestRule = new ActivityTestRule<>(MainActivity.class, true, false);
private MockWebServer mockWebServer;
@Before
public void setUp() throws Exception {
super.setUp();
mockWebServer = new MockWebServer();
mockWebServer.start();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
AppConstants.BASE_URL = mockWebServer.url("/").toString();
}
@Test
public void setupAndroidListAdapterTest() throws Exception {
String fileName = "android_list_response.json";
mockWebServer.enqueue(new MockResponse()
.setResponseCode(200)
.setBody(fileName));
Intent intent = new Intent();
mainActivityTestRule.launchActivity(intent);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@After
public void tearDown() throws Exception {
mockWebServer.shutdown();
}
}
公共类RecyclerAdapter扩展了RecyclerView.Adapter{
私有列表模型;
公共回收器适配器(列表型号){
this.model=模型;
}
@非空
@凌驾
public RecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.row_list,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(@NonNull RecyclerAdapter.ViewHolder,int位置){
holder.name.setText(model.get(position.getName());
holder.version.setText(model.get(position.getVer());
holder.api.setText(model.get(position.getApi());
}
@凌驾
public int getItemCount(){
返回model.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图名称、版本、api;
公共视图持有者(视图项视图){
超级(项目视图);
name=itemView.findviewbyd(R.id.rowName);
version=itemView.findviewbyd(R.id.rowVersion);
api=itemView.findViewById(R.id.rowApi);
}
}
}
我的测试类:
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);
}
}
}
@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest extends InstrumentationTestCase {
@Rule
public ActivityTestRule<MainActivity> mainActivityTestRule = new ActivityTestRule<>(MainActivity.class, true, false);
private MockWebServer mockWebServer;
@Before
public void setUp() throws Exception {
super.setUp();
mockWebServer = new MockWebServer();
mockWebServer.start();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
AppConstants.BASE_URL = mockWebServer.url("/").toString();
}
@Test
public void setupAndroidListAdapterTest() throws Exception {
String fileName = "android_list_response.json";
mockWebServer.enqueue(new MockResponse()
.setResponseCode(200)
.setBody(fileName));
Intent intent = new Intent();
mainActivityTestRule.launchActivity(intent);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@After
public void tearDown() throws Exception {
mockWebServer.shutdown();
}
}
@LargeTest
@RunWith(AndroidJUnit4.class)
公共类MainActivityTest扩展了InstrumentationTestCase{
@统治
public ActivityTestRule mainActivityTestRule=新的ActivityTestRule(MainActivity.class,true,false);
私有MockWebServer MockWebServer;
@以前
public void setUp()引发异常{
super.setUp();
mockWebServer=新建mockWebServer();
mockWebServer.start();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
AppConstants.BASE_URL=mockWebServer.URL(“/”).toString();
}
@试验
public void setupAndroidListAdapterTest()引发异常{
String fileName=“android\u list\u response.json”;
mockWebServer.enqueue(新的MockResponse()
.setResponseCode(200)
.setBody(文件名));
意图=新意图();
mainActivityTestRule.launchActivity(意图);
试一试{
睡眠(10000);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
@之后
public void tearDown()引发异常{
mockWebServer.shutdown();
}
}
我将上面的json保存到asset
文件夹中。我写了上面的代码,当运行测试时向我显示1个测试通过,但不向我显示任何数据到
recyclerView
和适配器中
我该怎么做?可能重复