我正在尝试实现一个使用android.os.Process.myPid的简单测试(实际上,我有一个使用myPid的大类,但是为了避免发布大型源代码,我简化了所有内容):
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class ProcessTest {
@Test
public void testTest() {
assertTrue(true);
}
@Test
public void testPid() {
int pid = android.os.Process.myPid();
//assertTrue(true);
}
}
第一次测试通过,但是第二次失败,并显示以下错误消息:
java.lang.UnsatisfiedLinkError: android.os.Process.myPid()I
怎么了?如何测试使用android.os.Process的类?
答案 0 :(得分:1)
您不能在单元测试中做到这一点。您无法在单元测试中访问Android OS软件包。你可以嘲笑他们!您需要一个进程ID,但是没有操作系统(除了正在开发的计算机之外)。
答案 1 :(得分:0)
一段时间后,我找到了解决问题的方法-仪器测试。是的,正如Krzysztof Kubicki指出的那样,它不能在单元测试中完成。但是,尽管有可能模拟事物,但在实际情况下却很难。我可以通过简单的测试来模拟pid,但是真正的东西是Tozny编写的AesCbcWithIntegrity,带有所有的花哨功能,包括以下内容:
int bytesRead = (Integer) Class
.forName("org.apache.harmony.xnet.provider.jsse.NativeCrypto")
.getMethod("RAND_load_file", String.class, long.class)
.invoke(null, "/dev/urandom", 1024);
这有点很难模拟。因此,我没有模拟,而是创建了工具测试并在模拟器上运行了测试。
那不费吹灰之力就解决了我的问题。是的,与常规的单元测试相比,仪器测试要慢一些,但至少可以。