在我想办法让我的Android App通过Unit Test和Integration Test的过程中,我积累了一些小的经验与技巧,可以成功的处理比较麻烦的代码。展示开始:
我想测试这段代码
- public void readDeepLink(String path) {
- new DeepLinkReader().readDeepLink(path);
- }
我只是想确保readDeepLink()方法执行了,但是我不想真的实例化DeepLinkReader因为这会引起网络操作。所以怎么修改呢?
解决方法
将实例化DeepLinkReader的代码封装到另外一个方法中,这样就可以用一个mock覆盖这个方法,这就可以避免在测试时实例化DeepLinkReader而可以使用Mockito来确认mock方法的执行。
解决代码
- //在MainPresenter.java中
- public void readDeepLink(String path) {
- getDeepLinkReader().readDeepLink(path);
- }
- DeepLinkReader getDeepLinkReader() {
- return new DeepLinkReader(currentData, events);
- }
- //在MainPresenterTest.java中
- @Mock private DeepLinkReader deepLinkReader;
- @Test
- public void shouldReadDeepLink() throws Exception {
- MainPresenter mainPresenter = new MainPresenter() {
- DeepLinkReader getDeepLinkReader() {
- return deepLinkReader;
- }
- };
- mainPresenter.readDeepLink("washingtonpost.com");
- verify(deepLinkReader).readDeepLink("washingtonpost.com");
- }