【发布时间】:2015-08-12 19:08:28
【问题描述】:
来自 Android 的测试基础,“您可以使用纯 JUnit 来测试不调用 Android API 的类,或使用 Android 的 JUnit 扩展来测试 Android 组件。” 我相信这就是为什么以下测试中的 spanString 为空的原因。有人可以确认这是原因吗?
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]);
}
}
这里是 SpanPainter.java
public class SpanPainter {
ForegroundColorSpan color;
public SpanPainter (ForegroundColorSpan color) {
this.color = color;
}
public SpannableString applyColor(SpannableString span,
Pair<Integer, Integer> pair) {
span.setSpan(color,pair.first, pair.second, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
return span;
}
}
但它说“使用 Android 的 JUnit 扩展来测试 android 组件。所以我扩展了 AndroidTestCase,但 spanString 仍然等于 null。这让我认为没有任何单元测试可以使用 android api 对象而不将其设置为 null。是对吗?(这是我的第二个问题。)这是作为 AndroidTestCase 的 SpanPainter 测试,导致 spanString = null。
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]);
}
}
这是我的两个 JUnit 问题。如果我不扩展 AndroidTestCase,那么在 android api 中使用任何对象都会导致 null。如果我扩展 AndroidTestCase,来自 android api 的任何对象都会自动设置为 null。
【问题讨论】:
标签: android unit-testing junit