2016-03-04 87 views
0

我寫在Android Studio中一個單元測試,並使用PowerMockPowerMock嘲笑MoreAsserts

測試看起來像這樣

@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嘲笑MoreAsserts沒有我問它...我錯過了什麼?

感謝, 斯拉瓦

回答

0

好吧,搜索後我找到了答案...... MoreAsserts是Android SDK中的類(android.test.MoreAsserts)

當運行單元測試中,Android SDK是不裝,而不是所有的類存根與拋出異常,包括MoreAsserts實現..

所以我需要替換使用JUnit斷言斷言:Assert.assertArrayEquals

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

希望它能幫助你們=]