Android JUnit测试可以';不要调用任何android api?

Android JUnit测试可以';不要调用任何android api?,android,unit-testing,junit,Android,Unit Testing,Junit,根据Android的测试基础,“您可以使用普通JUnit测试不调用Android API的类,或者使用Android的JUnit扩展测试Android组件。” 我相信这就是为什么下面测试中的spanString为null。有人能证实这是原因吗 import org.junit.Test; import static org.junit.Assert.assertEquals; public class SpanPainterTest { @Test public void applies

根据Android的测试基础,“您可以使用普通JUnit测试不调用Android API的类,或者使用Android的JUnit扩展测试Android组件。” 我相信这就是为什么下面测试中的spanString为null。有人能证实这是原因吗

import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class SpanPainterTest {
  @Test
  public void appliesColorPerRange () {
    SpannablesString spanString = new SpannableString("Aa Bb");
    SpanPainter painter = new SpanPainter(new ForegroundColorSpan(10));
    SpannableString coloredSpan = 
      painter.applyColor(spanString, new Pair<Integer, Integer>(0,1));
    ForegroundColorSpan[] colorArr = 
      coloredSpan.getSpans(0,0, ForegroundColorSpan.class);
    assertEquals(10, colorArr[0]);
  }
}

这是我的两个青年问题。如果我不扩展AndroidTestCase,那么在android api中使用任何对象都会导致null。如果我扩展AndroidTestCase,android api中的任何对象都会自动设置为null

我在使用
SpannableStringBuilder
时遇到了类似的问题。通过将测试移动到
androidTest
目录,我的问题得到了解决。(谢谢你的建议。)

以下是在新位置进行的测试:

/**
 * Instrumentation test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    @Test
    public void myStringTest() throws Exception {
        CharSequence unicode = "";
        MyClass myClass = new MyClass(unicode); 
        CharSequence result = myClass.getUnicodeText(); // uses SpannableStringBuilder internally
        CharSequence expected = unicode;
        assertEquals(expected, result);
    }
}
/**
*仪器测试,将在Android设备上执行。
*
*@见
*/
@RunWith(AndroidJUnit4.class)
公共类示例InstrumentedTest{
@试验
public void myStringTest()引发异常{
字符序列unicode=“”;
MyClass MyClass=新的MyClass(unicode);
CharSequence result=myClass.getUnicodeText();//在内部使用SpannableStringBuilder
字符序列应为unicode;
资产质量(预期、结果);
}
}
注意

你也可以试试,但对于像我这样的测试初学者来说,这要容易得多。我想,缺点是插装测试比单元测试运行得慢

public class SpanPainterTest extends AndroidTestCase {
  @SmallTest
  public void testAppliesColorPerRange () {
    SpannableString spanString = new SpannableString("Aa Bb");
    SpanPainter painter = new SpanPainter(new ForegroundColorSpan(10));
    ...same as above.
    assertEquals(9, colorArr[0]);
  }
} 
/**
 * Instrumentation test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {

    @Test
    public void myStringTest() throws Exception {
        CharSequence unicode = "";
        MyClass myClass = new MyClass(unicode); 
        CharSequence result = myClass.getUnicodeText(); // uses SpannableStringBuilder internally
        CharSequence expected = unicode;
        assertEquals(expected, result);
    }
}