编程语言
首页 > 编程语言> > Android Studio-测试配置启动应用程序

Android Studio-测试配置启动应用程序

作者:互联网

我在项目的单独程序包中有几个AndroidTestCase子类:
 

但是,每当我从Android Studio运行Android测试配置时,我都会看到我的常规应用也正在启动.我看到onCreate方法在我的Application类中启动了(这真的很糟糕,因为我在那里加载了一些其他资源).
 为什么Android Studio / gradle也同时运行我的应用程序?我可以通过编程方式检测我是否处于测试或常规配置中吗?运行测试之前,我可以停止引导常规应用程序吗?
另外,当我以调试模式运行测试时,它不会在放置在应用程序onCreate方法内部的断点处停止.为什么会这样呢?

编辑:

测试类的主体并不重要,可以是这样的:

public class SimpleTest extends AndroidTestCase {
    public void testSample()
    {
        assertEquals(true, false);
    }
}

仅执行此简单测试会在应用程序类内部启动onCreate方法.
Gradle控制台打印出:

Executing tasks: [:app:assembleDebug, :app:assembleDebugTest]

我猜第一个任务创建了我的Application类的实例-这是预期的行为吗?

解决方法:

Why is Android Studio/gradle running my app as well?

Can I stop my regular app from being booted before running tests?

AndroidTestCase是JUnit TestCase的扩展,它知道您的android应用程序.如果您不需要测试您的android应用程序而只想测试纯Java,则应该使用JUnit框架.创建常规的JUnit测试,不要在其中使用android类,并运行JUnit测试配置,如下所示:

您应该将AndroidTestCase视为工具测试,它将构建android应用并在其上运行该测试.结合使用EspressoRobotium很有用.两者都可以在基本的android测试类上运行,并且都将在测试之前构建并运行您的应用程序.需要真实的设备或仿真器.

使用普通的JUnit测试或Robolectric在桌面JVM上测试Java.

Can I programatically detect if I am inside test or regular configuration?

您可以使用gradle的功能通过自动生成的BuildConfig文件提供此类信息.

在您的build.gradle

android {
    defaultConfig {
        testPackageName "com.foo.test"
    }
}

在您的代码:

BuildConfig.PACKAGE_NAME.equals("com.foo.test")

标签:android-studio,gradle,android-testing,android
来源: https://codeday.me/bug/20191121/2052721.html