android - PowerMock 模拟 MoreAsserts

标签 android unit-testing assert powermock

我正在 android studio 中编写单元测试并使用 PowerMock

测试看起来像这样

@RunWith(PowerMockRunner.class)
@PrepareOnlyThisForTest({Typeface.class})
public class ExtendedTextViewTest {

    ...

    @Test
    public void ctor_context_attributeSet_ShouldSetTypeface() throws Exception {
        // Act
        final LinkedList<Typeface> actualTypefaces = new LinkedList<Typeface>();
        ExtendedTextView textView = spy(new ExtendedTextView(contextMock, attributeSet) {
            @Override
            public void setTypeface(Typeface typeface) {
                actualTypefaces.add(typeface);
            }
        });

        // Assert
        MoreAsserts.assertEquals(new Typeface[]{typefaceMock}, actualTypefaces.toArray());
        verify(typedArrayMock, times(1)).recycle();
    }

}

当我运行测试时出现错误:

java.lang.RuntimeException: Method assertEquals in android.test.MoreAsserts not mocked. See http://g.co/androidstudio/not-mocked for details.
    at android.test.MoreAsserts.assertEquals(MoreAsserts.java)
    at com.loka.loka.common.ExtendedTextViewTest.ctor_context_attributeSet_ShouldSetTypeface(ExtendedTextViewTest.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)

似乎 mockito 在没有我要求的情况下 mock 了 MoreAsserts ...我错过了什么?

谢谢, 光荣

最佳答案

好的,搜索后我找到了答案...... MoreAsserts是一个android sdk类(android.test.MoreAsserts)

当运行单元测试时,android sdk 没有加载,而是所有的类都被一个抛出异常的实现 stub ,包括 MoreAsserts..

所以我需要用 JUNit 断言替换断言:Assert.assertArrayEquals

Assert.assertArrayEquals(new Typeface[]{typefaceMock}, actualTypefaces.toArray());

希望对大家有所帮助=]

关于android - PowerMock 模拟 MoreAsserts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800075/

相关文章:

javascript - 使用 Mocha/Chai 测试异步函数时,无法满足期望总是会导致超时

android - 是否有SDK可以记录生产应用中的异常,事件和错误?

android - 如何更新 LiveData 值?

javascript - ionic : ReferenceError: $ is not defined

jquery - 核心 jQuery 库的单元测试

performance - 慢 Scala 断言

android - ListView 的项目没有显示

Angular 2 - 如何覆盖另一个模块中的依赖项以进行测试

c++ - 在初始化全局变量时使用断言宏

javascript - 断言属性不可配置