gpt4 book ai didi

android - Espresso 2.1 找不到我的测试

转载 作者:搜寻专家 更新时间:2023-11-01 07:54:27 25 4
gpt4 key购买 nike

我查看了堆栈中所有我发现有类似问题的问题,但没有一个给我一个实际有效的答案 ( https://stackoverflow.com/search?q=espresso+empty+test+suite )。

我有一个简单的项目,我想尝试 Espresso 。我的类文件如下所示:

package com.example.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class FirstActivity extends Activity implements View.OnClickListener {

Button mClickMeButton;
TextView mHelloWorldTextView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);

setupView();
}

private void setupView() {
mHelloWorldTextView = (TextView) findViewById(R.id.helloWorldTextView);
mHelloWorldTextView.setText(getTitleText());
mClickMeButton = (Button) findViewById(R.id.clickMeBtn);
mClickMeButton.setOnClickListener(this);
}

private String getTitleText() {
return "First Activity";
}

@Override
public void onClick(View v) {
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}
}

我的测试文件是这样的:

package com.example.myapplication.test;

import android.graphics.Bitmap;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.SmallTest;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

import com.example.myapplication.BuildConfig;
import com.example.myapplication.FirstActivity;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class FirstActivityTest extends ActivityInstrumentationTestCase2<FirstActivity> {

public FirstActivityTest() {
super(FirstActivity.class);
}

@Override
public void setUp() throws Exception {
super.setUp();
getActivity();
}

@Test
public void testListGoesOverTheFold() {
onView(withText("First Activity")).check(matches(isDisplayed()));
}
}

和这样的 build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'jacoco'
apply plugin: "sonar-runner"
apply plugin: 'spoon'

android {
compileSdkVersion 21
buildToolsVersion '22.0.1'

packagingOptions {
exclude 'LICENSE.txt'
}

defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"

testApplicationId "com.example.myapplication.test"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

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

dependencies {
testCompile 'org.easytesting:fest:1.0.16'
testCompile 'junit:junit:4.12'
testCompile 'org.robolectric:robolectric:2.4'
testCompile 'com.squareup:fest-android:1.0.8'

androidTestCompile 'com.squareup.spoon:spoon-client:1.1.9'
androidTestCompile 'com.android.support.test:runner:0.2'
androidTestCompile 'com.android.support.test:rules:0.2'
androidTestCompile('com.android.support.test.espresso:espresso-core:2.1') {
exclude group: 'javax.inject'
}
}

spoon {
debug = true
//devices = ['333236E9AE5800EC']
if (project.hasProperty('spoonClassName')){
className = project.spoonClassName
}
}
}

def coverageSourceDirs = [
'../app/src/main/java', 'src/gen'
]


task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") {
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = true
html.enabled = true
}

classDirectories = fileTree(
dir: './build/intermediates/classes/debug',
excludes: ['**/R.class',
'**/R$*.class'
])
sourceDirectories = files(coverageSourceDirs)
executionData = files('build/jacoco/testDebug.exec')
}
}

每次我尝试运行它时,我都会得到:

Testing started at 16:57 ...
Target device: genymotion-google_nexus_5___5_0_0___api_21___1080x1920-192.168.56.101:5555
Uploading file
local path: /Users/pernillauhlin/development/pingdom/android-robolectric-test/app/build/outputs/apk/app-debug.apk
remote path: /data/local/tmp/com.example.myapplication
No apk changes detected. Skipping file upload, force stopping package instead.
DEVICE SHELL COMMAND: am force-stop com.example.myapplication
Uploading file
local path: /Users/pernillauhlin/development/pingdom/android-robolectric-test/app/build/outputs/apk/app-debug-androidTest-unaligned.apk
remote path: /data/local/tmp/com.example.myapplication.test
No apk changes detected. Skipping file upload, force stopping package instead.
DEVICE SHELL COMMAND: am force-stop com.example.myapplication.test
Running tests
Test running startedTest running failed: Unable to find instrumentation info for: ComponentInfo{com.example.myapplication.test/android.test.InstrumentationTestRunner}
Empty test suite.

我的结构是:

enter image description here

此外,从命令运行勺子给我同样的结果。所以,我的问题是:

  • 我错过了什么?
  • 测试注释;我已经看到了很多变化,在类里面,在测试之前等等。什么是正确的方法?或者您可以在类之前指定@LargeTest 并在实际测试方法之前指定@SmallTest 吗?

编辑:

我的运行配置如下所示:

看起来 android.support.test.runner.AndroidJUnitRunner 不存在。

构建变体:

enter image description here

最佳答案

我通过在测试配置中设置错误 android.test.InstrumentationTestRunner 成功重现了您的情况。

我建议检查您是否有正确的-android.support.test.runner.AndroidJUnitRunner-(或没有)在运行菜单中指定|编辑配置

此外,您的问题的标题有些令人困惑,因为从构建 gradle 依赖关系来看,我的理解是您实际上是在使用 Espresso 2.1。如果这是真的,请注意:

TestCases like ActivityInstrumentationTestCase2 or ServiceTestCase are deprecated in favor of ActivityTestRule or ServiceTestRule.

也可以看出herehere ,注释将按以下方式使用:(将调整您弃用的测试类只是因为我很好)

//annotate JUnit4 test classes with
@RunWith(AndroidJunit4.class)
@LargeTest
public class FirstActivityTest {

//use the following annotation and declare an ActivityTestRule for your activity under test
@Rule
public ActivityTestRule<FirstActivity> mActivityRule = new ActivityTestRule(FirstActivity.class);

//use @Before to setup your test fixture
@Before
public void setUp() { ... }

//annotate all test methods with
@Test
public void testHelloWorld() { ... }

//release resources by using
@After
public void tearDown() { ... }
}

更多关于 Rules

了解更多关于 test size annotations 的其他好地方

关于android - Espresso 2.1 找不到我的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com