单元测试 - 以编程方式运行任务

时间:2013-05-15 05:51:04

标签: groovy gradle

我正在为gradle创建自定义任务。我不知道如何创建将使用我的自定义任务类的任务。可能吗?我想为将在jenkins上运行的功能测试创建此任务。

这是我的自定义任务:

package pl.gradle

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class MyCustomTask extends DefaultTask {

    public MyCustomTask() {
        // do something
    }

    @TaskAction
    def build() {
        ant.echo(message: "only for tests")
    }               
}

这是我的测试课程:

package pl.gradle

import static org.junit.Assert.*

import org.gradle.testfixtures.ProjectBuilder
import org.gradle.api.Project
import org.junit.Before;
import org.junit.Test

class MyCustomTaskTest {

    private Project project;
    def task

    @Before
    public void setUp() {
        project = ProjectBuilder.builder().build()
        task = project.task("build", type: MyCustomTask)
    }

    @Test
    public void taskCreatedProperly() {
        assertTrue(task instanceof MyCustomTask)
    }

    @Test
    public void shouldRunTask() {
//      task.execute() // how to run this task? I want to run build() method from MyCustomTask class which is @TaskAction
    }
}

2 个答案:

答案 0 :(得分:0)

ProjectBuilder适用于不执行任务的低级别测试。它的最佳位置是测试插件。此外,您还可以编写执行实际构建的高级测试(因此也可以编写任务)。您通常使用Gradle工具API来启动这些构建。在完整的Gradle分发中查看工具API示例。

答案 1 :(得分:0)

为每个任务操作调用 Action.execute 自己:

Route::get('application/approve/{id}', 'CandidateController@postApprove')->name('application');
Route::get('candidate', [CandidateController::class, 'approve'])->name('candidate.approve');
Route::resource('candidates', CandidateController::class);

我之前在这里提到过:https://stackoverflow.com/a/63613564/410939