久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3414|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

關(guān)于安卓實(shí)機(jī)白盒測(cè)試的一些技巧

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一.外部測(cè)試用例創(chuàng)建new對(duì)象時(shí),構(gòu)造函數(shù)里因執(zhí)行super(context);會(huì)報(bào)錯(cuò),尋找解決方法

oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMyNjc1MjY3,size_16,color_FFFFFF,t_70#pic_center)

```java
// super調(diào)用到這里
public AbsAction(Context var1) {
        boolean var10000 = true;
        JniLib1606719255.cV(new Object[]{this, var1, 4});
    }
```

1.使用powermock.spy(new ActionExecuter(context));因還是會(huì)調(diào)用構(gòu)造函數(shù),*Failed*
2.不能使用打樁@Mock,因?yàn)樾枰獪y(cè)試該類中的其它方法(此為目的)   *Failed*
3.反射:“獲取類中的有殘構(gòu)造方法就可以通過(guò)反射**執(zhí)行這個(gè)有參構(gòu)造方法**就可以構(gòu)建對(duì)象” ,*Failed*
4.不創(chuàng)建對(duì)象,直接調(diào)用方法,根本原理上就無(wú)法實(shí)現(xiàn)        *Failed*
5.`PowerMockito.mockStatic(JniLib1606719255.class);`也不行,會(huì)報(bào)錯(cuò)(安卓原生問(wèn)題):*Failed*

```java
java.lang.UnsatisfiedLinkError: android.util.Log.println_native(IILjava/lang/String;Ljava/lang/String;)I

        at android.util.Log.println_native(Native Method)
        at android.util.Log.e(Log.java:240)
```
6.外部新建類繼承該源碼類:因該類只有有參構(gòu)造函數(shù),繼承出來(lái)的類中的構(gòu)造函數(shù)還是要執(zhí)行super才行,否則報(bào)錯(cuò):`There is no default constructor available in 'com.desaysv.adapter.sceneengine.ActionExecuter'`   *Failed*
7.在第6方法上,繼承后,寫(xiě)一個(gè)有參構(gòu)造函數(shù),再寫(xiě)一個(gè)無(wú)參構(gòu)造函數(shù),也不行。和6同理 *Failed*
8.放棄,改源碼,加個(gè)無(wú)參構(gòu)造函數(shù),也不行,和6、7同樣情況  *Failed*
9.沒(méi)法搞,該類暫無(wú)法單元測(cè)試,使用實(shí)機(jī)的灰盒繼承測(cè)試

二、Powermockito.doNothing提示錯(cuò)誤:

```cpp
Cannot access org.mockito.stubbing.BaseStubber
```
1.添加mockito-all依賴,不行: `testImplementation group: 'org.mockito', name: 'mockito-all', version: '1.10.19'`  *Failed*
2.Mockito-core 3.8+因?qū)oesNothing()改為了私有,無(wú)視即可,直接運(yùn)行:
```cpp
public static PowerMockitoStubber doNothing() {
        return POWERMOCKITO_CORE.doAnswer(new DoesNothing());
    }
``

```cpp
//.Mockito-core 3.8
   private DoesNothing() {}
```
三、mock對(duì)象空指針問(wèn)題,(記錄)

```cpp
//測(cè)試代碼
repositoryProxy = PowerMockito.mock(RepositoryProxy.class);
repositoryProxy.bind(Mockito.any(),Mockito.any(),Mockito.any());
```
會(huì)報(bào)錯(cuò):

```cpp
java.lang.NullPointerException
        at com.desaysv.adapter.sceneengine.manager.MediaManagerTest.init(MediaManagerTest.java:57)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:316)
        at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
        at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:300)
```
四、Mockito.verify()參數(shù)報(bào)錯(cuò)問(wèn)題

```objectivec
//源碼
Mockito.verify(repositoryProxy).bind(context,Target.RADIO,Mockito.any());
```

```
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
3 matchers expected, 1 recorded:
-> at com.desaysv.adapter.sceneengine.manager.MediaManagerTest.init(MediaManagerTest.java:59)

This exception may occur if matchers are combined with raw values:
    //incorrect:
    someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
    //correct:
    someMethod(anyObject(), eq("String by matcher"));
```
方法:按照要求修改參數(shù),如Matchers.eq(Target.RADIO),改為:

```objectivec
Mockito.verify(repositoryProxy).bind(Matchers.eq(context),Matchers.eq(Target.RADIO),Mockito.any());
```
此來(lái)源:[https://stackoverflow.com/questi ... ofmatchersexception](https://stackoverflow.com/questi ... ofmatchersexception)
五、MeadiPlayer等安卓原生類無(wú)法被mock

六、今天ROBO配置與測(cè)試卡在如下報(bào)錯(cuò):2021-04-01

```objectivec
WARNING: No manifest file found at .\AndroidManifest.xml.
No such manifest file: .\AndroidManifest.xml
Falling back to the Android OS resources only.
To remove this warning, annotate your test class with @Config(manifest=Config.NONE).
[Robolectric] com.desaysv.adapter.sceneengine.manager.RoboTest.myTest: sdk=27; resources=legacy
[Robolectric] NOTICE: legacy resources mode is deprecated; see robolectric點(diǎn)org/migrating/#migrating-to-40
```
問(wèn)題點(diǎn)可能出現(xiàn)在@config()中無(wú)法配置如下內(nèi)容導(dǎo)致,仍待研究。。。
```objectivec
constants = BuildConfig.class
```
七、模擬測(cè)試回調(diào)函數(shù)時(shí),用powermock或者M(jìn)ockito.doAnswer()都可以,因此可以運(yùn)用在安卓實(shí)機(jī)測(cè)試上,如:

```objectivec
//onPreparedListener = (MediaPlayer.OnPreparedListener)ol;獲取到要測(cè)試的回調(diào)函數(shù)
doAnswer(new Answer<Object>() {
            public Object answer(InvocationOnMock invocation) throws IOException {
                Object[] args = invocation.getArguments();
                Object ol = args[0];
                if(ol instanceof MediaPlayer.OnPreparedListener){
                    onPreparedListener = (MediaPlayer.OnPreparedListener)ol;
                }
                return null;
            }
        }).when(mediaPlayer).setOnPreparedListener(Mockito.any(MediaPlayer.OnPreparedListener.class));
```
來(lái)源模仿:[www點(diǎn)voidcn點(diǎn)com/article/p-kpzdmtlj-bsv.html](www點(diǎn)voidcn點(diǎn)com/article/p-kpzdmtlj-bsv.html)
八、安卓實(shí)機(jī)測(cè)試注意 場(chǎng)景/response/空指針 判斷

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:914012 發(fā)表于 2021-4-29 13:29 | 只看該作者
來(lái)一起討論唄
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久吹潮日韩动画 | 国产亚洲一区精品 | 久久久性色精品国产免费观看 | 久久久久久www | 在线观看av网站永久 | 亚洲五码久久 | 午夜视频网站 | 欧美在线播放一区 | 成人免费在线观看 | 欧美精品一区二区三区四区五区 | 午夜在线 | 狠狠综合久久av一区二区小说 | 日本人做爰大片免费观看一老师 | 91亚洲欧美 | 97偷拍视频| 国产在线精品一区二区三区 | www.亚洲区 | 一级h片 | 午夜午夜精品一区二区三区文 | 精品乱码一区二区 | 久久美女视频 | 成人午夜免费福利视频 | 成人一区av | 亚洲激情在线观看 | 国产在线一区观看 | 国产乱码精品一区二区三区中文 | 精精国产xxxx视频在线播放 | 国产精品免费一区二区三区四区 | 成人免费大片黄在线播放 | 成人免费视频7777777 | 亚洲欧洲精品成人久久奇米网 | 免费黄色的视频 | 日韩中文字幕 | 日韩第一区 | 欧美在线小视频 | 亚洲在线一区二区三区 | 久久三级影院 | 国产午夜三级一区二区三 | 亚洲精品一区在线观看 | 黄色av网站在线观看 | 久草新在线 |