Articles of unit testing

使用EspressotestingRxJava2,并在suscribeOn时获得空指针exception

Android Studio 3.0 Beta2 我正在testing使用RxJava2获取端点的列表。 该应用程序正常运行时工作正常。 但是,当我testing使用espresso时,我尝试和subscribeOn(scheduler)时,我得到一个空指针exception。 对于调度程序,我使用trampoline()来注入subscribeOn和observeOn 。 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'io.reactivex.Observable io.reactivex.Observable.subscribeOn(io.reactivex.Scheduler)' on a null object reference 对于使用espressotestingRxJava2,有什么我应该做的,对于subscribeOn和observeOn是不同的? @Singleton @Component(modules = { MockNetworkModule.class, MockAndroidModule.class, MockExoPlayerModule.class }) public interface TestBusbyBakingComponent extends BusbyBakingComponent { TestRecipeListComponent add(MockRecipeListModule mockRecipeListModule); } 这是我的课程 public class RecipeListModelImp implements RecipeListModelContract { private RecipesAPI recipesAPI; private RecipeSchedulers […]

用Mavenunit testingAndroid

我有一个关于使用Maven构build的Android项目的问题,我们让它运行我们的活动testing,但现在我们需要它来运行unit testing。 unit testing与活动testing在同一个项目中,我如何在我们的pom.xml文件中进行设置? 这是Parent Pom.xml文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>andersen.project</groupId> <artifactId>Hello-parent</artifactId> <version>1.0</version> <packaging>pom</packaging> <name>Hello – Parent</name> <modules> <module>HelloWorld</module> <module>HelloWorldTest</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>2.2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.android</groupId> <artifactId>android-test</artifactId> <version>2.2.1</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> <build> <sourceDirectory>src</sourceDirectory> <testSourceDirectory>test</testSourceDirectory> <pluginManagement> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>maven-android-plugin</artifactId> <version>2.8.3</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> […]

unit testing定位服务

我有一个位置跟踪服务,我正在尝试unit testing。 我试图使用locationManager.addTestProvider和setTestProviderLocation方法来实现这一点。 但是,我似乎无法获得任何地点通过提供商,并击中了我的LocationListener。 这是我的代码: public void testGettingLocations() { mLocationManager = (LocationManager)mContext.getSystemService(Context.LOCATION_SERVICE); if (mLocationManager.getProvider(TEST_PROVIDER) != null) { mLocationManager.removeTestProvider(TEST_PROVIDER); } mLocationManager.addTestProvider(TEST_PROVIDER, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE); mLocationManager.setTestProviderEnabled(TEST_PROVIDER, true); mLocationManager.setTestProviderStatus(TEST_PROVIDER, LocationProvider.AVAILABLE, null, System.currentTimeMillis()); locations = new ArrayList<Location>(); mLocationManager.requestLocationUpdates(TEST_PROVIDER, 0, 0, ll); for (int i = 0; i<130; i++) { Location loc = new […]

如何使用mock()和spy()来testing静态方法

代码部分中的下面的发布方法包含一个“with()”的静态方法。 我想testing下面的代码,所以我编写了这个方法的testing,如testing部分所示。 我试图使用“间谍()”和“模拟()”testing方法,但testing失败了。 请让我知道如何testing一个方法返回void? 码 public RequestCreator requestCreatorFromUrl(String picUrl) { return Picasso.with(mCtx).load(picUrl); } testing : public class ValidationTest { @Mock private Context mCtx = null; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Before public void setUp() throws Exception { mCtx = Mockito.mock(Context.class); Assert.assertNotNull("Context is not null", mCtx); } @Test public void whenRequestCreatorFromUrlTest() throws Exception { Picasso […]

是否有可能找出一个Android应用程序是否作为仪器testing的一部分运行

是否有一个运行时检查应用程序,以确定它是否作为仪器testing的一部分运行? 背景:我们的应用程序在启动时执行数据库同步。 但是这只有在定期开始时才会发生。 它尤其会干扰testing数据库同步的仪器testing。 不出所料。 而所有其他的testing只是浪费CPU周期。

有没有人在那里使用没有Maven IntelliJ上的Robolectric?

所有使用Robolectric的例子我都可以find似乎是基于Maven的。 有没有人使用Maven? 如果是这样,我真的想了解你的IntelliJ项目设置。 读过这篇文章 机器人unit testing的办法 对unit testingandroid项目的分层方法与纯junit,robolectric和androidtesting框架testing相结合似乎是明智的。 如果有人使用或不使用Maven,我很想了解一下如何在IntelliJ中configuration项目。 我猜我会需要多个项目/模块。 任何智慧在这个感激的接受。

在Android Studio中为unit testingconfigurationtesting文件夹

我在我的android studio项目中添加了unit testing的文件夹。 默认文件夹是andoidTest,但是我在testing中添加了一个新文件夹和名称。 ( 如robolectric抽样testing ) 当我添加testing依赖在我的build.gradle模块下如 testCompile("junit:junit:${junitVersion}") testCompile ("org.robolectric:robolectric:${robolectricVersion}") 他们不会被添加到项目下的外部库中,但是当我使用默认configuration并使用androidTestCompile ,它可以添加外部库。 然后我想也许我应该在gradle中设置root用于testing,所以我在build.gradle中使用了android标签中的以下内容: sourceSets { androidTest.setRoot('src/test') } 但仍然存在问题。 我可以使用gradlew运行testing,但是在test文件夹中的类中的导入不适用,也不会出现用于testing目的的外部库。 任何人有任何解决这个问题?

如何开启电动logging

我需要一个非常简单的方法来让Robolectric 3.0打开日志。 我想看看robolectric的输出,而不仅仅是我的testing。 我在网上试过的所有东西都无法正常工作。 我坚持这个? robolectric.logging.enabled = true 我尝试了以下内容: 在test / java / res中的robolectric.properties文件中 在test / java / resources中的robolectric.properties文件中 在test / res中的robolectric.properties文件中 在testing/资源中的robolectric.properties文件中 在gradle中: afterEvaluate { project.tasks.withType(Test) { systemProperties.put('robolectric.logging.enable', 'true') } } 在gradle中: tasks.withType(Test) { testLogging.exceptionFormat = 'full' systemProperties.put('robolectric.logging.enable', 'true') }

用AndroidAnnotations进行testing可以注入吗?

我还没有find如何做到这一点的例子。 我假设这是不可能的基于这样的例子: @Bean(MyImplementation.class) MyInterface myInterface; 那里注入的课程已经确定了。

为Robolectrictesting导入正确的AssertThat方法

我试图从Robolectric.org的“ 写你的第一个testing”页面运行testing 。 有问题的testing看起来像这样: @Test public void clickingLogin_shouldStartLoginActivity() { WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class); activity.findViewById(R.id.login).performClick(); Intent expectedIntent = new Intent(activity, WelcomeActivity.class); assertThat(shadowOf(activity).getNextStartedActivity()).isEqualTo(expectedIntent); } 我得到这个编译错误: Cannot resolve method 'assertThat(android.content.Intent) 。 我看到导入这个方法的两种可能性是org.hamcrest.MatcherAssert.assertThat和org.junit.Assert.assertThat ,它们都没有一个单参数assertThat方法,正如在Robolectrictesting中使用的那样。 我的应用程序的build.gradle有这些依赖关系: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.1.0' compile 'com.android.support:design:23.1.0' testCompile "org.robolectric:robolectric:3.0" testCompile 'junit:junit:4.12' } 这个testing使用了什么框架/库?