标签: android-testing

Android 本地单元测试 - 使用 MockK 模拟 FirebaseAuth

概述

预期行为-在 Android 中使用 JUnit5 使用 MockK 的轻松构造函数模拟功能在本地单元测试中模拟FirebaseApp.class

当前行为- 引发以下错误。

java.lang.NoClassDefFoundError: 无法初始化类 com.google.firebase.FirebaseApp

执行

模拟的类/函数 - FirebaseAuth.class

package com.google.firebase.auth;
@NonNull
    @Keep
    public static FirebaseAuth getInstance() {
        return (FirebaseAuth)FirebaseApp.getInstance().get(FirebaseAuth.class);
    }
//`getCurrentUser` is accessed via the auto generated `currentUser` attribute in Kotlin.
@Nullable
    public FirebaseUser getCurrentUser() {
        return this.zzf;
    }
Run Code Online (Sandbox Code Playgroud)

测试 - SomeTest.kt


// Relaxed mock attempts.
every { FirebaseApp.getInstance() } returns mockk(relaxed = true)
every { FirebaseAuth.getInstance(any())} returns mockk(relaxed …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-testing firebase mockk

1
推荐指数
1
解决办法
2163
查看次数

如何使用命令行在 Android 测试类中传递参数?

我想要一种将命令行参数发送到我的测试类以运行所有单元测试并从中创建测试覆盖率报告的方法。我使用下面的命令来生成测试覆盖率报告并传递参数

./gradlew createDebugCoverageReport -Dparam=input1  
Run Code Online (Sandbox Code Playgroud)

下面是应用程序 gradle 文件

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 30

    defaultConfig {
        applicationId "com.example.testcoverageapp"
        minSdkVersion 27
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            testCoverageEnabled true
        }

    }

    testOptions {
        unitTests.includeAndroidResources = true
        unitTests.all {
            useJUnitPlatform()
            test {
                println systemProperties['param']
                systemProperties(System.getProperties())
            }
        }
    }



    tasks.withType(Test){
        systemProperties=System.properties
        println systemProperties['param.name']
        systemProperty 'param.name', System.getProperty('param')
    }
    
}


dependencies {
    implementation fileTree(dir: …
Run Code Online (Sandbox Code Playgroud)

android gradle android-testing build.gradle android-instrumentation

1
推荐指数
1
解决办法
2518
查看次数

在Xamarin NUnit测试类中读取资产

我想阅读一个模拟的RSS提要文件,以便在Android应用的Xamarin NUnit测试中进行测试.测试类没有上下文,所以我不能将文件放在Assets文件夹中并执行此操作:

System.IO.Stream strIn = instanceOfAssetManager.Open(feedFile);
Run Code Online (Sandbox Code Playgroud)

它也没有祖先,所以我不能这样做:

System.IO.Stream strIn = this.Class.ClassLoader.ResourceAsStream(feedFile);
Run Code Online (Sandbox Code Playgroud)

有什么建议我怎么可以到达快乐的事情?

这个案例解决了不同平台/设置的类似问题: 在测试项目中存储测试文件

nunit xamarin.android android-testing

0
推荐指数
1
解决办法
985
查看次数

MockitoException:无法模拟类com.example.example.test.MainActivity

我试图安装Mockito并收到错误消息.当我得到它时,我会回来添加我自己的答案.

对于真正的MainActivity及其派生的MockActivity,测试端都会发生这种情况.

它也发生在一个新的Android项目中,Android版本为4.3,并且是一个非常新的Eclipse.再加上Mockito 1.9.5.任何问题,维护者?

测试用例很简单,并且使用ActivityUnitTestCase<MainActivity>.

有没有人见过这种堆栈跟踪?

org.mockito.exceptions.base.MockitoException: Failed to mock class com.example.example.test.MockActivity

at com.example.example.test.SmartPhinsTest.test_mockito_mocks_activities(ExampleTest.java:39)

at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
Run Code Online (Sandbox Code Playgroud)

有人可能已经找到了测试框架标签吗?

(普通)代码片段是:

package com.example.example.test;

import java.io.File;

import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
import android.test.ActivityUnitTestCase;

import com.example.example.MainActivity;

import static org.mockito.Mockito.*;

public class ActivityTests extends ActivityUnitTestCase<MainActivity> {
    public ActivityTests(Class<MainActivity> activityClass) {
        super(activityClass);
    }
    public ActivityTests() {
        super(MainActivity.class);
    }
    Activity activity;
    Context targetContext;
    Intent intent;

    @Override
    protected void setUp() throws Exception {
        targetContext = getInstrumentation().getTargetContext();
        intent …
Run Code Online (Sandbox Code Playgroud)

android unit-testing mockito android-testing

0
推荐指数
1
解决办法
1616
查看次数

在设备中执行时,JUnit 测试总是通过

这个简单的测试

@RunWith(JUnit4::class)
class Test {

    @Test
    fun test() {
        assert(false)
    }

}
Run Code Online (Sandbox Code Playgroud)

出乎意料的是,这在放入时androidTest(通过 Android Studio 和在终端中)通过,但在放入test.

junit android kotlin android-testing

0
推荐指数
1
解决办法
817
查看次数

什么是AndroidX.Test框架,它如何影响我的单元/机器人/咖啡测试?

我已经通过Android文档中的Test Android Apps进行了测试。Google推出了AndroidX测试,但是我对其含义仍然感到困惑。

我将MVVM Android体系结构组件与ViewModel,LiveData一起使用。

我需要使用Android X Framework的哪些部分?

View(Activity.Fragments)->浓咖啡?

ViewModel(with LiveData)-> RoboElectric吗?

模型-> JUnit还是RoboElectric?

为什么Google仍然使我们对许多库感到困惑,为什么它们不能在同一个Framework(Espresso)下移动所有本地测试,工具测试以及所有内容?

android android-testing android-espresso androidx

-1
推荐指数
1
解决办法
541
查看次数