【发布时间】:2016-09-05 13:35:20
【问题描述】:
以下是我要测试的代码。
public class Demo {
private static final List<Pair<String, String>> mList;
static {
mList = new ArrayList<>();
mList.add(new Pair<>("F0", "T1"));
mList.add(new Pair<>("F1", "T2"));
mList.add(new Pair<>("F2", "T3"));
}
public String getStr(int pos) {
return mList.get(pos).first;
}
}
我是一名安卓开发者。我在测试和模拟代码时遇到了一些麻烦。我使用了 mockito。 我已经尝试了一些代码来测试它,但结果不是我的预期。
1.第一次尝试
@Test
public void test(){
Demo demo=new Demo();
assertEquals(demo.getStr(0),"F0");
/**
* java.lang.AssertionError:
* Expected :null
* Actual :F0
*/
}
2.第二次尝试
@Test
public void test() {
Demo demo = mock(Demo.class);
doCallRealMethod().when(demo).getStr(0);
assertEquals(demo.getStr(0), "F0");
/**
* java.lang.AssertionError:
* Expected :null
* Actual :F0
*/
}
谁能告诉我如何通过调用真实方法来解决这个问题以制作 demo.getStr(0) == "F0"?谢谢!
============================
另一个问题与此有关
我已经尝试了另一个测试来测试android.util.Pair类,结果是“pair.first”为空,。(有androidTest和测试目录,我把它放在测试包中。它有影响吗结果?)
import android.util.Pair;
import org.junit.Test;
import org.mockito.Mockito;
import static org.junit.Assert.assertEquals;
public class DemoTest {
@Test
public void test1(){
Pair<String,String> pair=new Pair("First","Second");
assertEquals("First",pair.first);
//pair.first was null,why?
}
@Test
public void test2(){
Pair<String,String> pair= Mockito.spy(Pair.class);
assertEquals("First",pair.first);
//pair.first was null also,why?
}
}
为什么简单的代码在真实的android环境下是正确的,但在测试中却失败了?
【问题讨论】:
-
为什么结果总是空?
-
在第一个实现中,您甚至没有使用 mockito。看来
Pair类的first字段确实是null。 -
@Apokralipsa 但是在第二个实现中它仍然是空的,为什么?这让我困扰了很久。你能给我一个正确的例子吗?我应该使用 PowerMock,因为该字段是静态的和最终的?
标签: android unit-testing mockito