我开始学习Android单元测试,但看起来很难找到一些好的指南或信息。每个例子都有一个关于2 + 2 = 4
的愚蠢的例子假设我写了一个功能很少的SDK
MySdk.Init(Context context)
MySdk.CallTask()
我创建了一个androidTest
文件
我应该如何调用我的SDK函数来检查它们的工作方式?某处需要参数,如int / string / context。我真的不明白,请帮助我。
这是我尝试过的
public class AndroidTest {
private Activity context;
//default test
@Test
public void addition_correct() throws Exception {
assertEquals(4, 2 + 2);
}
@Test
public void checkContext() {
context = getActivity();
assertNotNull(context);
}
@Test
public void testInitPhase() {
MySdk.Init(context, new SdkInitializationListener() {
@Override
public void onInitializationSuccessful(String adv_id) {
assert (adv_id != null);
}
@Override
public void onInitializationError() {
}
});
}
}
对于上下文,我尝试了context = new mockContext();
。它已作为context = null
传递,我的SDK因初始化失败。
答案 0 :(得分:2)
单元测试主要是单独测试单个类,以便您可以检查类的各个公共方法是否按照您的意图行事,如果您将来更改该类的代码,则继续这样做。假设你有这样一个类:
public class UtilityFunctions {
public int double(int value) {
return value * 2;
}
public String mirror(String value) {
if (value == null) return "";
return value + new StringBuilder(value).reverse().toString();
}
}
您希望使用以下方法测试这两种方法:
因此上述类的测试类可能如下所示
@RunWith(JUnit4.class)
public class UtilityFunctionsTest {
private UtilityFunctions utility;
@Before
public void setUp() {
// Initialises any conditions before each test
utility = new UtilityFunctions();
}
@Test
public void testDoubleFunction() {
assertEquals(2, utility.double(1));
assertEquals(8, utility.double(4));
assertEquals(-12, utility.double(-6));
assertEquals(0, utility.double(0));
}
@Test
public void testMirror() {
assertEquals("", utility.mirror(null));
assertEquals("", utility.mirror(""));
assertEquals("aa", utility.mirror("a"));
assertEquals("MirrorrorriM", utility.mirror("Mirror"));
}
}
这些标准Java单元测试从test
目录运行。但是,只要您使用 Android特定类(例如androidTest
),就需要在Context
目录中运行测试。如果您要创建MockContext
,则只需创建一个空的Context
,其方法不会执行任何操作。
如果我对MySDK
的作用一无所知,我认为您可能需要将功能齐全的Context
传递到您的班级进行测试。 Android JUnit运行器确实提供了InstrumentationRegistry.getTargetContext()
,因此对于您的示例,您可能需要添加此@Before
方法:
@Before
public void setUp() {
context = InstrumentationRegistry.getTargetContext();
}
您还需要从第一次测试中删除context = getActivity();
行。