如何使用 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;