Learn the basics of unit testing your plugin to ensure it behaves as expected.

In this section, you’ll:

  • Update the default unit test to verify your plugin’s functionality.

  • Run the unit tests to confirm your plugin registers its task correctly.

Step 0: Before you Begin

  1. You initialized your plugin in part 1.

  2. You added an extension to your plugin in part 2.

  3. You created a custom task in part 3.

Step 1: About Unit Tests

Gradle init creates a sample unit test to get you started.

It's located in `src/test/kotlin/org/example/PluginTutorialPluginTest.kt`.
It's located in `src/test/groovy/org/example/PluginTutorialPluginTest.groovy`.

The original test is simple, it applies the default org.example.greeting plugin and verifies that the greeting task is available. We will update it to test our new plugin.

Step 2: Update the Test

First, let’s rename the test file to match our plugin’s name.

Rename the file `PluginTutorialPluginTest.kt` to `SlackPluginTest.kt`.
Rename the file `PluginTutorialPluginTest.groovy` to `SlackPluginTest.groovy`.

Next, update the code to reflect our plugin’s ID (org.example.slack) and task name (sendTestSlackMessage).

plugin/src/test/kotlin/org/example/SlackPluginTest.kt
package org.example

import org.gradle.testfixtures.ProjectBuilder
import kotlin.test.Test
import kotlin.test.assertNotNull

class SlackPluginTest {
    @Test fun `plugin registers task`() {
        // Create a test project and apply the plugin
        val project = ProjectBuilder.builder().build()
        project.plugins.apply("org.example.slack")

        // Verify the result
        assertNotNull(project.tasks.findByName("sendTestSlackMessage"))
    }
}
plugin/src/test/groovy/org/example/SlackPluginTest.groovy
package org.example

import org.gradle.testfixtures.ProjectBuilder
import org.gradle.api.Project
import spock.lang.Specification

class SlackPluginTest extends Specification {
    def "plugin registers task"() {
        given:
        def project = ProjectBuilder.builder().build()

        when:
        project.plugins.apply("org.example.slack")

        then:
        project.tasks.findByName("sendTestSlackMessage") != null
    }
}

This test:

  1. ProjectBuilder.builder().build(): Creates an in-memory test project, which is perfect for isolating our plugin’s behavior.

  2. project.plugins.apply(…​): Applies our SlackPlugin to the test project.

  3. assertNotNull(…​): Confirms that our sendTestSlackMessage task was successfully registered by the plugin.

Step 3: Run the Test

You can now run the test task from the command line to make sure everything is working correctly.

$ ./gradlew test

> Task :plugin:checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :plugin:processTestResources NO-SOURCE
> Task :plugin:pluginDescriptors UP-TO-DATE
> Task :plugin:processResources UP-TO-DATE
> Task :plugin:compileKotlin UP-TO-DATE
> Task :plugin:compileJava NO-SOURCE
> Task :plugin:classes UP-TO-DATE
> Task :plugin:pluginUnderTestMetadata UP-TO-DATE
> Task :plugin:jar UP-TO-DATE
> Task :plugin:compileTestKotlin
> Task :plugin:compileTestJava NO-SOURCE
> Task :plugin:testClasses UP-TO-DATE
> Task :plugin:test

BUILD SUCCESSFUL in 1s
7 actionable tasks: 2 executed, 5 up-to-date

If your test passes, you’ve successfully verified that your plugin is registering its custom task as intended!

Next Step: Add a DataFlow Action >>