Android JUnit测试可以';不要调用任何android api?
根据Android的测试基础,“您可以使用普通JUnit测试不调用Android API的类,或者使用Android的JUnit扩展测试Android组件。” 我相信这就是为什么下面测试中的spanString为null。有人能证实这是原因吗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
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);
}
}