AndroidStudio / Gradle with powermock

时间:2014-08-05 10:43:00

标签: android gradle powermock

我找不到有关如何使用Android Studio / Gradle设置powermock的任何信息。我尝试过的所有内容都会导致构建异常。

有人能说出正确的方法吗?

感谢。

7 个答案:

答案 0 :(得分:51)

我发帖是为了帮助未来的读者,你需要在AS中为powermock添加这些依赖

testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock-api-mockito:1.6.2'
testCompile 'org.powermock:powermock-module-junit4-rule-agent:1.6.2'
testCompile 'org.powermock:powermock-module-junit4-rule:1.6.2'
testCompile 'org.powermock:powermock-module-junit4:1.6.2'

答案 1 :(得分:24)

将以下行添加到依赖项{}块:

testCompile 'org.powermock:powermock-api-mockito:1.6.5'

如果您想使用PowerMockito,请添加以下行:

    <ImageButton
    android:id="@+id/bt_next"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:enabled="false"
    android:src="@drawable/ic_arrow_right"
    android:text="@string/bt_next" />

<ImageButton
    android:id="@+id/bt_info"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@+id/bt_next"
    android:layout_toStartOf="@+id/bt_next"
    android:layout_marginEnd = "8dp"
    android:background="@null"
    android:src="@drawable/ic_info" />

<TextView
    android:id="@+id/tv_resultmessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true" />

<ImageButton
    android:id="@+id/bt_praxis"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toEndOf="@+id/bt_back"
    android:layout_toRightOf="@+id/bt_back"
    android:layout_marginStart = "8dp"
    android:background="@null"
    android:src="@drawable/ic_praxis" />

<ImageButton
    android:id="@+id/bt_back"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:src="@drawable/ic_arrow_left"
    android:text="@string/bt_back" />

<ProgressBar
    android:id="@+id/pb_quiz"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/bt_back"
    android:padding="5dp"
    android:progress="1" />

答案 2 :(得分:4)

在构建脚本中,添加以下内容:

sourceSets {
    unitTest {
        java.srcDir file('*your test directory*') //for example: tests/java
    }
}

android {
    sourceSets {
        instrumentTest.setRoot('*your root test directory*') //for example: tests
    }
}

repositories {
    mavenCentral()
}

dependencies {
    testCompile 'junit:junit:4.11'
    testCompile 'org.powermock:powermock-mockito-release-full:1.4.9'
}

然后,从命令行执行gradle unitTest。

希望有效。如果没有,请发布命令行的输出。

答案 3 :(得分:4)

如果你想使用更新版本的Mockito,你可以使用这样的东西,它是从mockito 2 Powermock docs改编的。请确保使用right version of PowerMock for the given version of Mockito

...
testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:2.4.0"
testCompile 'org.powermock:powermock-module-junit4:1.7.0RC2',
            'org.powermock:powermock-api-mockito2:1.7.0RC2'

答案 4 :(得分:3)

// mockito
testImplementation 'org.mockito:mockito-core:2.4.0'
androidTestImplementation 'org.mockito:mockito-core:2.4.0'
// PowerMock
testImplementation 'org.powermock:powermock-core:1.7.0RC2'
testImplementation 'org.powermock:powermock-module-junit4:1.7.0RC2'
testImplementation 'org.powermock:powermock-api-mockito2:1.7.0RC2'

答案 5 :(得分:1)

我的示例从我能找到的所有其他答案中汇编而成,并在撰写本文时提供了最新版本:

app\build.gradle

dependencies {
    testImplementation group: 'junit',         name: 'junit',                   version: '4.13'
    ...
    testImplementation group: 'org.powermock', name: 'powermock-api-mockito2',  version: '2.0.7'
    testImplementation group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.7'
}

一个测试类,其中模拟了Android Log类。

import android.util.Log;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Log.class})
public class DateUtilsTest {
    @BeforeClass
    public static void beforeClass() {
        PowerMockito.mockStatic(Log.class);
    }
    ...
}

答案 6 :(得分:0)

我和@Bhargav使用相同的一些附加功能

  • 测试用例的代码覆盖率(如果 testCoverageEnabled true ,则启用 Jacoco 工具)
  • 单元测试将仅测试您的代码,并且不依赖于Android平台的任何特定行为( UnitTests.returnDefaultValues = true

build.gradle 中添加此标记的行以启用JUnit, PowerMockito, JaCoCo

enter image description here enter image description here