Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在单元测试中用模拟数据填充适配器?_Java_Android_Android Recyclerview_Android Espresso_Android Testing - Fatal编程技术网

Java 如何在单元测试中用模拟数据填充适配器?

Java 如何在单元测试中用模拟数据填充适配器?,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);
        }
    }
}
@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();
    }
}
公共类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);
        }
    }
}
@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();
    }
}
@RunWith(AndroidJUnit4.class)
公共类MainActivityTest扩展了InstrumentationTestCase{
@统治
public ActivityTestRule activityTest=新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()引发异常{
}
@之后
public void tearDown()引发异常{
mockWebServer.shutdown();
}
}
我将上面的json保存到
asset
文件夹中。

我不知道如何将测试写入
setupAndroidListAdapterTest()
以填充
adapter
,并在
recyclerView
中显示模拟数据


我该怎么做?请帮帮我

你找到解决办法了吗?我也在想同样的。。。