Android Mockito java.lang.AssertionError:

时间:2016-03-15 06:14:42

标签: android unit-testing junit mockito

我刚刚开始使用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());
    }
}

2 个答案:

答案 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);