Android单元测试:SpannableStringBuilder

4
我的一个课程使用了SpannableStringBuilder,我需要为其编写单元测试代码。这个类是用于一般用途的,不与任何UI组件交互。我考虑它作为本地单元测试,但是Android Studio抱怨'unit test not mocked'。我已经检查了Android Mock和Robolectric,但我无法弄清楚我必须模拟哪个仪器。我还尝试将测试放在AndroidTest目录下,并将其作为仪器测试运行,但仍然出现错误'Class not found: "....." Empty test suit'。
单元测试代码:
package xxxxxxx;  // Sorry but I should keep it secret now.

import android.support.test.filters.SdkSuppress;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.SpannableString;
import android.support.test.runner.AndroidJUnit4;

import org.junit.Test;
import org.junit.runner.RunWith;

import xxxxxxx.HtmlParser;

import static org.junit.Assert.*;

@RunWith(AndroidJUnit4.class)
@SdkSuppress(minSdkVersion=16)
@SmallTest
public class HtmlParserTest {
    @Test
    public void TestGetHtml() {
        // assertion goes here
    }

    @Test
    public void TestGetPlainText() {
        // assertion goes here
    }
}
2个回答

3

我不知道是不是因为我做错了什么。最终,我让它工作了,并在此为您提供解决方案供参考。

如我在问题中所述,这个单元测试应该在 Android 设备或模拟器上运行。所以第一件事情就是将它移动到 androidTest 目录下。只有这样,Android Studio 才能将其识别为一个仪表盘测试。还要记得按照这里所述更新您的应用程序的 gradle.build。但是 Android Studio(我的是 v2.1)不允许您直接运行此测试(至少我不能)。您必须创建一个测试套件,看起来像:

package xxxxxxx.htmltestsuite;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;


@RunWith(Suite.class)
@Suite.SuiteClasses({
    HtmlParserTest.class
})

// place holder class
public class HtmlTestSuite {}

1
将测试移动到 androidTest 目录中。这是解决我的问题的方法。非常有帮助!谢谢。 - Suragch

0
今天我遇到了一个问题,当我在测试目录下进行junit测试时。当我创建一个SpannableStringBuilder时,例如, SpannableStringBuilder ssb = new SpannabelStringBuilder(str), 那么ssb的值总是“null”。但是如果我将其移除到androidTest目录下,并扩展AndroidTestCase,则会生效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接