我刚刚开始使用Mockito,所以我可以在我的Android应用程序上执行单元测试。我不明白为什么我收到以下错误:
任何人都可以告诉我,我在这里缺少什么?
java.lang.AssertionError:
Expected :http://a/h/url
Actual :null
<Click to see difference>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:834)
at org.junit.Assert.assertEquals(Assert.java:118)
测试课
@RunWith(MockitoJUnitRunner.class)
public class NewsItemWrapperTest {
public static final String T_URL ="http://a/th/url";
public static final String H_URL ="http://a/h/url";
@Mock
NewsItem newsItem;
@Mock
NewsItemWrapper newsItemWrapper;
@Before
public void setUp() throws Exception {
//initMocks(this);
newsItemWrapper = new NewsItemWrapper(newsItem);
}
@Test
public void testGetThumbImageUrl() throws Exception {
assertEquals(T_URL, newsItemWrapper.getThumbNailImage());
}
@Test
public void testGetHeroImageUrl() throws Exception {
assertEquals(H_URL, newsItemWrapper.getHImage());
}
}
答案 0 :(得分:0)
你的NewsItem newsItem;
是个嘲笑。它基本上什么也没做。虚空方法无能为力。其他方法将返回null(或适当的默认原始值)。因此,在您的情况下,对newsItem.getMediaList()
的调用将返回null。
要改变这一点,你必须告诉你的模拟它应该做某事,最好是@Before
方法,例如...
List<NewsItem.Media> mediaList = new ArrayList<>();
...put stuff in it
Mockito.when( newsItem.getMediaList() ).thenReturn( mediaList );
这告诉你的模拟:&#34;当你调用方法getMediaList()(newsItem)时,返回此列表。&#34;。您还可以告诉模拟器抛出异常(例如,测试错误处理)等。
请记住:这是模拟的工作,允许您模拟行为。没有命令来模拟某些东西,mock就什么都不做。模拟允许您轻松地为依赖项创建虚假对象(在这种情况下,您的代码取决于NewsItem
,并且使用模拟允许您拥有一个NewsItem
,其行为将完全按照您的测试需要进行测试情况,无论是正确还是某种程度上有缺陷。)
答案 1 :(得分:0)
这只是一个例子。同样,你需要模拟所有方法。 你也可以模拟媒体对象。
Media m1 = new Media();
Media m2 = new Media();
List<Media> mediaList = Arrays.asList(m1, m2);
when(newsItem.getMediaList()).thenReturn(mediaList);