我无法在测试中通过id找到Textview。我做错了什么?
private MyActivity myActivity;
@Before
public void setUp() throws Exception {
myActivity= Mockito.mock(MyActivity .class);
}
测试:
@Test
public void testFindView() throws Exception {
System.out.println(myActivity); // This is not null
this.myActivity.setContentView(R.layout.container);
TextView viewText = (TextView) this.myActivity.findViewById(R.id.container_text);
System.out.println(viewText ); // This is null
}
答案 0 :(得分:1)
调用Mockito.mock()
并不会创建一个真实的实例,而只会创建一个真实的实例。它的主要目的是使单元测试远离任何外部依赖,并跟踪与对象的交互。
所以,当你打电话给this.myActivity.setContentView(R.layout.container);
时,没有什么事情真的发生,因为嘲笑myActivity没有常规MyActivity的内部 - 你只是调用了一个你没有命令做任何事情的存根方法。
因此,如果要测试它的工作原理,则需要创建一个真实的MyActivity实例。如果您仍想跟踪互动,也可以使用Spy对象进行游戏(可以查看here)