Mackito Mocking Android Context PackageManager exception

I start with Mockito for Android without Unit Test headphones. The part I want to test is in the backend, which depends on the context. I tried to mock the context, but I get null when I run the test.

The mocking context seen in this example does not show me how it is taunted: https://developer.android.com/training/testing/unit-testing/local-unit-tests.html#setup

The example from the link mentioned above ( https://github.com/googlesamples/android-testing/tree/master/unit/BasicSample ) does not have an example of how the context is being mocked.

So, I lost a little.

In my gradle dependencies, I have the following:

testCompile 'junit:junit:4.12' androidTestCompile 'com.android.support.test:runner:0.4' androidTestCompile 'com.android.support.test:rules:0.4' androidTestCompile 'com.android.support:support-annotations:23.0.1' testCompile 'org.mockito:mockito-core:1.10.19' androidTestCompile('com.android.support.test:testing-support-lib:0.+') 

Code snippet:

 @RunWith(MockitoJUnitRunner.cass) public static Test { @Mock Context mContext; RequestQueue mQueue; @Test public void getCategories(){ final String SERVER = "http://{...}/categories"; mContext = mock(Context.class); int size = 20; when(mContext.getResources().getInteger(R.integer.cache_size)).thenReturn(size); mQueue = VolleyUtil.newRequestQueue(mContext, null, size); final Response.Listener<String> listener = new Response.Listener(){ //... } Response.ErrorListener error = new Response.ErrorListener(){ ///... } mQueue.add(new JsonRequest(SERVER, listener, error); } VolleyUtil.newRequestQueue(final Context context, HttpStack stack, final int cacheMB){ final File cacheDir = new File(context.getCacheDir(), "volley"); if(stack == null) { if(Build.VERSION.SDK_INT >= 9) { stack = new HurlStack(); } else { String userAgent = "volley/0"; try { final String network = context.getPackageName(); final PackageInfo queue = context.getPackageManager().getPackageInfo(network, 0); userAgent = network + "/" + queue.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStacktrace(); } stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } } final BasicNetwork network = new BasicNetwork((HttpStack)stack); final RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir,diskCacheMB*1000000), network); queue.start(); return queue; 

}

My zero exception occurs when:

 final PackageInfo queue = context.getPackageManager().getPackageInfo(network, 0); 

Suppose you mimic a package manager or application instance?

+6
source share
1 answer

Since you are not testing Android resources on JUnit, you also need to do this. eg:

 PackageInfo pi = new PackgeInfo(); // modify it value the way you desire when(mContext.getPackageManager().getPackageInfo(network, 0)).thenReturn(pi); 

Then continue unit testing.

0
source

Source: https://habr.com/ru/post/1232644/


All Articles