flo*_*cca 6 junit android unit-testing
从Android的Testing Fundamentals,"你可以使用普通的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]);
}
}
Run Code Online (Sandbox Code Playgroud)
这是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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是它说"使用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]);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的两个JUnit问题.如果我不扩展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);
}
}
Run Code Online (Sandbox Code Playgroud)
笔记
您也可以尝试模拟 Android 类,但这对于像我这样的测试初学者来说要容易得多。我认为缺点是仪器测试运行得比单元测试慢。
| 归档时间: |
|
| 查看次数: |
1176 次 |
| 最近记录: |