如何使用 Robolectric 获取 Android 上下文 4.3.1
How to get Android Context using Robolectric 4.3.1
尝试使用 Robolectric 4.3.1 执行最基本的 Android 操作,获取上下文。
我通过这样做得到了一个非空上下文(尝试了许多其他尝试,但最终都得到了上下文 = null):
Context context = RuntimeEnvironment.systemContext;
我可以将对象传递给某些方法,但我永远无法使用它。
如果我尝试
File dir = context.getFilesDir();
我明白了
java.lang.RuntimeException: No data directory found for package android
我做错了什么?
这是我的代码:
@RunWith(RobolectricTestRunner.class)
@Config(sdk = Build.VERSION_CODES.O)
public class BtScannerTests
{
private BluetoothAdapter bluetoothAdapter;
@Before
public void setUp() throws Exception
{
bluetoothAdapter = Shadow.newInstanceOf(BluetoothAdapter.class);
}
private static boolean done = false;
@Test
public void testBtScannerCycle() throws InterruptedException
{
IntermediaryCallback intermediaryCallback = new IntermediaryCallback()
{
@Override
public void onReceiveMdsIntermediary(MdsIntermediary mds, int connectionHandle)
{
}
@Override
public void onReceiveMetricIntermediaries(List<MetricIntermediary> metricList, MdsIntermediary mds, int connectionHandle)
{
}
};
StatusEventCallback statusEventCallback = new StatusEventCallback()
{
@Override
public void onStatusEvent(StatusEvent statusEvent, int connectionHandle, String btAddress)
{
System.out.println("Status event " + statusEvent.name());
if(statusEvent == StatusEvent.SCANNING_PAUSED);
{
done = true;
}
}
};
Context context = RuntimeEnvironment.systemContext;
File dir = context.getFilesDir(); // This is the code that fails; put here to test attempts
AndroidBtManager.setStatusEventCallback(statusEventCallback);
AndroidBtManager androidBtManager =
new AndroidBtManager(context, intermediaryCallback, false, false, true);
BtScanner btScanner = androidBtManager.getBtScanner();
while(!done)
{
Thread.sleep(1000);
}
}
}
用这个。
Context context = ApplicationProvider.getApplicationContext();
而不是
Context context = RuntimeEnvironment.systemContext;
尝试使用 Robolectric 4.3.1 执行最基本的 Android 操作,获取上下文。
我通过这样做得到了一个非空上下文(尝试了许多其他尝试,但最终都得到了上下文 = null):
Context context = RuntimeEnvironment.systemContext;
我可以将对象传递给某些方法,但我永远无法使用它。
如果我尝试
File dir = context.getFilesDir();
我明白了
java.lang.RuntimeException: No data directory found for package android
我做错了什么?
这是我的代码:
@RunWith(RobolectricTestRunner.class)
@Config(sdk = Build.VERSION_CODES.O)
public class BtScannerTests
{
private BluetoothAdapter bluetoothAdapter;
@Before
public void setUp() throws Exception
{
bluetoothAdapter = Shadow.newInstanceOf(BluetoothAdapter.class);
}
private static boolean done = false;
@Test
public void testBtScannerCycle() throws InterruptedException
{
IntermediaryCallback intermediaryCallback = new IntermediaryCallback()
{
@Override
public void onReceiveMdsIntermediary(MdsIntermediary mds, int connectionHandle)
{
}
@Override
public void onReceiveMetricIntermediaries(List<MetricIntermediary> metricList, MdsIntermediary mds, int connectionHandle)
{
}
};
StatusEventCallback statusEventCallback = new StatusEventCallback()
{
@Override
public void onStatusEvent(StatusEvent statusEvent, int connectionHandle, String btAddress)
{
System.out.println("Status event " + statusEvent.name());
if(statusEvent == StatusEvent.SCANNING_PAUSED);
{
done = true;
}
}
};
Context context = RuntimeEnvironment.systemContext;
File dir = context.getFilesDir(); // This is the code that fails; put here to test attempts
AndroidBtManager.setStatusEventCallback(statusEventCallback);
AndroidBtManager androidBtManager =
new AndroidBtManager(context, intermediaryCallback, false, false, true);
BtScanner btScanner = androidBtManager.getBtScanner();
while(!done)
{
Thread.sleep(1000);
}
}
}
用这个。
Context context = ApplicationProvider.getApplicationContext();
而不是
Context context = RuntimeEnvironment.systemContext;