在我遇到同样问题的时候,我发现了这个问题。最终我自己解决了它。
假设您有一个简单的onCreateViewHolder
,就像这样:
@Override
public TeamsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new NewsViewHolder(LayoutInflater
.from(parent.getContext())
.inflate(R.layout.fragment_news_view_holder, parent, false)
);
}
使用PowerMock
来模拟LayoutInflater
的静态实例。在下面的代码片段中,我已经用编号注释了所有必须执行的步骤以使其正常工作:
import android.test.mock.MockContext;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
@RunWith(PowerMockRunner.class)
@PrepareForTest({LayoutInflater.class})
public class NewsRecyclerViewAdapterTest {
@Mock
LayoutInflater mockInflater;
@Mock
View mockView;
@Mock
ViewGroup mockParent;
private int dummyTestId;
private MockContext mockContext;
private NewsRecyclerViewAdapter adapter;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
dummyTestId = 0x10000;
mockStatic(LayoutInflater.class);
mockContext = new MockContext();
adapter = new NewsRecyclerViewAdapter(Arrays.asList(new NewsItem(), new NewsItem(), new NewsItem()));
}
@Test
public void onCreateViewHolderShouldReturnAValidViewHolder() throws Exception {
when(mockParent.getContext()).thenReturn(mockContext);
when(LayoutInflater.from(mockContext)).thenReturn(mockInflater);
when(mockInflater.inflate(anyInt(), eq(mockParent), eq(false))).thenReturn(mockView);
NewsViewHolder viewHolder = adapter.onCreateViewHolder(mockParent, dummyTestId);
assertNotNull(viewHolder);
assertEquals(viewHolder.getItemView(), mockView);
}
}