无法在测试中找到 Textview

Unable to find Textview in testing

我在测试中无法通过 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
}

调用Mockito.mock()并不会创建一个真实的实例,而只是一个人造的实例。它的主要目的是使单元测试远离任何外部依赖项并跟踪与对象的交互。

因此,当您调用 this.myActivity.setContentView(R.layout.container); 时,实际上什么也没有发生,因为模拟的 myActivity 没有常规 MyActivity 的内部 - 您只是在调用一个存根方法,您没有命令它执行任何操作。 所以如果你想测试它是如何工作的,你需要创建一个真实的 MyActivity 实例。如果您仍想跟踪交互,也可以使用 Spy 对象(您可以查看它们 here