Đã thêm @VisibleForTesting
và được bảo vệ. thử nghiệm của tôi bây giờ có thể phương pháp này:Kiểm tra một lớp Phân đoạn trong sự cô lập bằng cách sử dụng Mockito
@VisibleForTesting
protected void setupDataBinding(List<Recipe> recipeList) {
recipeAdapter = new RecipeAdapter(recipeList);
RecyclerView.LayoutManager layoutManager
= new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
rvRecipeList.setLayoutManager(layoutManager);
rvRecipeList.setAdapter(recipeAdapter);
}
Cập nhật các trường hợp thử nghiệm sử dụng đối tượng gián điệp: Tuy nhiên, setupDataBinding thực (recipe) đang nhận được gọi là ngay cả khi tôi đã tạo ra một mô hình của ông do thám mà sẽ được gọi. Có lẽ tôi đang làm điều này sai.
@Test
public void testShouldGetAllRecipes() {
RecipeListView spy = Mockito.spy(fragment);
doNothing().when(spy).setupDataBinding(recipe);
fragment.displayRecipeData(recipe);
verify(recipeItemClickListener, times(1)).onRecipeItemClick();
}
Tôi đang cố gắng kiểm tra các phương thức trong lớp học Fragment
như sau. Tuy nhiên, tôi đang cố gắng để thử ra các phương pháp để xác minh rằng các phương pháp được gọi là số lần chính xác. Tuy nhiên, vấn đề là tôi có phương thức private
setupDataBinding(...)
được thiết lập trên RecyclerView
được gọi từ displayRecipeData(...)
. Tôi muốn thử các cuộc gọi này vì tôi không muốn gọi đối tượng thực sự trên RecyclerView
. Tôi chỉ muốn xác minh rằng setupDataBinding(...)
được gọi.
Tôi đã thử sử dụng gián điệp và VisibleForTesting
, nhưng vẫn không chắc chắn cách thực hiện việc này.
Tôi đang cố gắng kiểm tra Phân đoạn một cách riêng biệt.
public class RecipeListView
extends MvpFragment<RecipeListViewContract, RecipeListPresenterImp>
implements RecipeListViewContract {
@VisibleForTesting
private void setupDataBinding(List<Recipe> recipeList) {
recipeAdapter = new RecipeAdapter(recipeList);
RecyclerView.LayoutManager layoutManager
= new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
rvRecipeList.setLayoutManager(layoutManager);
rvRecipeList.setAdapter(recipeAdapter);
}
@Override
public void displayRecipeData(List<Recipe> recipeList) {
/* Verify this get called only once */
setupDataBinding(recipeList);
recipeItemListener.onRecipeItem();
}
}
Đây là cách tôi đang thử nghiệm. Tôi đã thêm tư tưởng VisibleForTesting
tôi có thể trợ giúp. Và tôi đã thử dùng điệp viên.
public class RecipeListViewTest {
private RecipeListView fragment;
@Mock RecipeListPresenterContract presenter;
@Mock RecipeItemListener recipeItemListener;
@Mock List<Recipe> recipe;
@Before
public void setup() {
MockitoAnnotations.initMocks(RecipeListViewTest.this);
fragment = RecipeListView.newInstance();
}
@Test
public void testShouldGetAllRecipes() {
fragment.displayRecipeData(recipe);
RecipeListView spy = Mockito.spy(fragment);
verify(recipeItemListener, times(1)).onRecipeItem();
}
}
Điều gì sẽ là cách tốt nhất để kiểm tra trên trong sự cô lập?
Rất cám ơn mọi lời khuyên.
Thêm '@ VisibleForTesting' là không đủ. Bạn cũng phải thay đổi công cụ sửa đổi truy cập cho 'setupDataBinding (...)' thành được bảo vệ, gói riêng tư hoặc công khai. – liminal
@liminal Tôi đã cập nhật câu hỏi của mình với những trang phục mới nhất của tôi. Tôi không ngăn chặn được phương pháp thực sự từ bing được gọi là mặc dù tôi đã tạo ra một đối tượng gián điệp của nó. – ant2009