Concordion is a simple, but powerful, agile acceptance testing tool for Java.

Download

Latest Release for Java

Full distribution including source code and all dependencies:

Download Concordion concordion-1.4.2.zip (1.1MB)

Maven configuration:

<dependency>
    <groupId>org.concordion</groupId>
    <artifactId>concordion</artifactId>
    <version>1.4.2</version>
</dependency>

Or, for the bleeding edge, build from the subversion repository: http://concordion.googlecode.com/svn/trunk/concordion

Changes in Concordion 1.4.2

Non-Java versions

Concordion is available for .NET, Ruby, and Python. [More details]


Extensions (Optional)

The command-set for Concordion is purposely small, however, it is possible to extend Concordion in various ways.

Download extensions library

Maven configuration:

<dependency>
    <groupId>org.concordion</groupId>
    <artifactId>concordion-extensions</artifactId>
    <version>1.1.0</version>
</dependency>

The concordion-extensions sub-project (Java only), developed and maintained by Nigel Charman enhances Concordion with abilities such as adding screenshots and logging information to the generated output. See here for a more detailed description.

Download the concordion-extensions jar and/or demo or build from the Mercurial repository.

Changes in concordion-extensions 1.1.0

Or build your own extensions

See here for more details.

[Note: If you have previously extended Concordion, by referencing internal classes, you'll need to make some changes to use the public API. If you have any questions please ask on the mailing list.]


New and Noteworthy Features

Example of concordion:run

concordion:run

This new command, contributed by Stein Kåre Skytteren, lets you link to another specification and run it, displaying the link's background in green / red / gray as appropriate.

You might use this to create a page containing a list of all the acceptance tests for a feature, in a similar way you would use a JUnit test suite.

[More details]

Support for JUnit 4.5

Example syntax:

package spec.examples;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)
public class Demo {

    public String greetingFor(String firstName) {
        return String.format("Hello %s!", firstName);
    }
}

Please note that JUnit 4.4 is no longer supported due to changes in JUnit's API between 4.4 and 4.5. JUnit 3.8.x is still supported, however.

Annotations

You can include partially-implemented specifications in your normal build without breaking the build, by annotating your fixture classes with one of the following annotations:

  • @ExpectedToPass
  • @ExpectedToFail
  • @Unimplemented

For example:

import org.concordion.api.ExpectedToFail;
import org.concordion.integration.junit3.ConcordionTestCase;

@ExpectedToFail
public class GreetingTest extends ConcordionTestCase {

   public String greetingFor(String firstName) {
        return "TODO";
   }

See here for an explanation of the semantics of each annotation.

Linked Test Data

A special variable "#HREF" lets you access the href attribute for a link. This can be used when you want to reference test data from a specification. [More details]

concordion:assertTrue

For example:

<p>
    When user <b concordion:set="#firstName">Bob</b>
    logs in, the greeting will be:
    <b concordion:assertEquals="greetingFor(#firstName)">Hello Bob!</b>
</p>

<p>
    The first name <span concordion:assertTrue="#firstName.startsWith(#letter)">starts
    with <b concordion:set="#letter">B</b></span>.
</p>

<p>
    The first name <span concordion:assertTrue="#firstName.startsWith(#letter)">starts
    with <b concordion:set="#letter">C</b></span>.
</p>

Will result in this output: