Ely*_*lye 15 android unit-testing parameterized parameterized-unit-test android-studio
我尝试在Android Studio中运行参数化单元测试,如下所示.
import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
@SmallTest
public class FibonacciTest extends TestCase {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{0, 0}, {1, 1}, {2, 1}, {3, 2}, {4, 3}, {5, 5}, {6, 8}
});
}
@Parameter // first data value (0) is default
public /* NOT private */ int fInput;
@Parameter(value = 1)
public /* NOT private */ int fExpected;
@Test
public void test() {
assertEquals(fExpected, Fibonacci.calculate(fInput));
}
}
Run Code Online (Sandbox Code Playgroud)
结果是错误表明没有测试运行.但是,如果我删除了Parameterized,并将它们更改为单独测试.有用.任何人都可以解释为什么这不起作用?Android开发中是否不支持参数化单元测试?谢谢!
下面是堆栈跟踪的错误.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:testDebug'.
> No tests found for given includes: [com.example.......FibonacciTest]
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:testDebug'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:310)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:90)
at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:54)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:49)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:71)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: org.gradle.api.GradleException: No tests found for given includes: [com.example........FibonacciTest]
at org.gradle.api.internal.tasks.testing.NoMatchingTestsReporter.afterSuite(NoMatchingTestsReporter.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:87)
at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:31)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy46.afterSuite(Unknown Source)
at org.gradle.api.internal.tasks.testing.results.TestListenerAdapter.completed(TestListenerAdapter.java:48)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:87)
at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:31)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy45.completed(Unknown Source)
at org.gradle.api.internal.tasks.testing.results.StateTrackingTestResultProcessor.completed(StateTrackingTestResultProcessor.java:69)
at org.gradle.api.internal.tasks.testing.results.AttachParentTestResultProcessor.completed(AttachParentTestResultProcessor.java:52)
at org.gradle.api.internal.tasks.testing.processors.TestMainAction.run(TestMainAction.java:51)
at org.gradle.api.internal.tasks.testing.detection.DefaultTestExecuter.execute(DefaultTestExecuter.java:75)
at org.gradle.api.tasks.testing.Test.executeTests(Test.java:527)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:226)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:219)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:208)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:589)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:572)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
... 57 more
BUILD FAILED
Total time: 4.153 secs
No tests found for given includes: [com.example......FibonacciTest]
Run Code Online (Sandbox Code Playgroud)
Nob*_*ere 139
我正在使用 JUnit 4,对我有用的是将“Gradle -> Run Tests Using”的 IntelliJ 设置从“Gradle(默认)”更改为“IntelliJ IDEA”。
我的修复来源:https : //linked2ev.github.io/devsub/2019/09/30/Intellij-junit4-gradle-issue/
Seb*_*ian 70
添加
test {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
到顶层给了我错误“无法找到参数的方法 test()”。相反,我必须将其添加到块testOptions内android
android {
...
testOptions {
unitTests.all {
useJUnitPlatform()
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 51
以防万一这对任何人有帮助,这发生在我的 IntelliJ 上,情况是,测试之前一直在 Gradle 上工作,但突然间,第二天一些测试停止工作并出现此错误。
我所做的是:
这样做,我避免了更改本地配置或更改项目中的 Gradle 文件。
skr*_*ets 36
要添加到Przemek315提供的已经很好且简单的解决方案,如果您使用 Kotlin DSL,则使用相同的配置:
tasks.test {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
小智 28
添加到您的build.gradle中:
test {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
Use*_*sbs 19
在build.gradle中添加,
test {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
并使用类org.junit.jupiter.api.Test作为@Test,而不是org.junit.Test
小智 15
对于遇到错误的任何人:Expression 'test' cannot be invoked as a function添加建议的解决方案时,请尝试改为
tasks.withType<Test> {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
适用于 2021 年的 KMM 设置。
ans*_*hul 11
我最近遇到了这个问题,经过深入研究,我发现我正在使用库@Test中的注释junit。但是,我的build.gradle文件声明了另一个测试库。
因此,当我使用测试库中@Test的注释时,它就起作用了。build.gradle
Ely*_*lye 10
找到了在Android Studio中运行测试的方法.显然使用Gradle Configuration运行它不会执行任何测试.相反,我使用JUnit配置.这样做的简单方法是选择要运行的测试类和右键单击.然后选择Run.之后,您将看到2个运行选项.根据图像选择底部(JUnit)
(注意:如果您无法选择2 Run Configuration,则需要先删除先前使用的Configuration(Gradle Configuration).可以通过单击Top中的"Select Run/Debug Configuration"图标来完成.工具栏.
确保@Test从正确的库中导入注释:
import org.junit.jupiter.api.Test
不
import org.junit.Test
如果您正在使用 intellij 并想使用 gradle,则需要将其添加到 build.gradle 文件的依赖项部分:
testImplementation("org.junit.jupiter:junit-jupiter-api:5.4.2")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.4.2")
Run Code Online (Sandbox Code Playgroud)
对我来说,错误消息的原因
未找到给定包含的测试
无意中.java在我的测试目录下添加了一个测试文件src/test/kotlin。将文件移动到正确的目录后,src/test/java测试再次按预期执行。
我犯了这样定义我的测试的错误
class MyTest {
@Test
fun `test name`() = runBlocking {
// something here that isn't Unit
}
}
Run Code Online (Sandbox Code Playgroud)
这导致runBlocking返回一些东西,这意味着该方法不是无效的,并且 junit 没有将其识别为测试。那太蹩脚了。我现在明确提供一个类型参数来运行阻塞。它不会停止疼痛或让我恢复两个小时,但它会确保这种情况不会再次发生。
class MyTest {
@Test
fun `test name`() = runBlocking<Unit> { // Specify Unit
// something here that isn't Unit
}
}
Run Code Online (Sandbox Code Playgroud)
Kotlin DSL:添加到你的 build.gradle.kts
tasks.withType<Test> {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
Gradle DSL:添加到你的 build.gradle
test {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
很难相信,但我的例子中的问题是我为测试用例创建的包的名称错误。它不应包含大写字母。例如,这些情况不正确: "PackageName" "Packagename" "packageName"
小智 5
使用 JUnit 4 时,我在 Intellij 中遇到了类似的错误。
修复方法是从 build.gradle.kts 中删除
test { useJUnitPlatform() }
Run Code Online (Sandbox Code Playgroud)
结果build.gradle.kts
test { useJUnitPlatform() }
Run Code Online (Sandbox Code Playgroud)
并且测试工作正常
plugins {
kotlin("jvm") version "1.8.0"
application
id("org.jetbrains.kotlin.plugin.serialization") version "1.5.31"
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
implementation("com.google.code.gson:gson:2.8.8")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0")
implementation ("org.apache.poi:poi-ooxml:5.1.0")
testImplementation(kotlin("test"))
testImplementation("junit:junit:4.13.1")
}
kotlin {
jvmToolchain(11)
}
application {
mainClass.set("MainKt")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26523 次 |
| 最近记录: |