Download
Latest Release for Java
Full distribution including source code and all dependencies:
![]() |
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
- Simplified configuration of extensions through new @Extension and @Extensions annotations.
- Fixture classes can now be suffixed with "Fixture" as an alternative to "Test" (Issue 37)
- Fixed stack-trace rendering problem in Google Chrome (Issue 36)
- Fixed Concordion output displaying spaces as  (Issue 38)
- Expose withSource() and withTarget() via the Concordion Extension mechanism (Issue 39)
- Fixed JavaScriptLinker producing invalid (x)html (Issue 26)
- The offending filename is now shown on HTML parse errors (Issue 27)
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
- Support method chaining in extensions to provide fluent way of configuring them (Issue 15)
- Fixed - Tooltip renderer fails on verify rows (Issue 13)
- Updated examples to use new @Extension and @Extensions annotations
- Updated examples to Selenium 2.0 (Issue 14)
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
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.
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:

