[{TableOfContents}]

!! Introduction
Knowledge engineering with KnowWE is supported by a continuous integration framework, that allows to embed automated tests on the knowledge. These tests are executed on regular bases (triggers can be configured) and in case of failure the users are alerted. An overview about the history and the testing results in provided on a dashboard. This allows for a safe development process. The use of the existing CI features is described [here|Doc CIDashboard]

!! Create new tests
KnowWE provides an extension point to add new CITests, called ''CITest''. To create an extension of this kind the class [AbstractTest|https://isci.informatik.uni-wuerzburg.de/javadoc/d3web/de/d3web/testing/AbstractTest.html] which is an abstract implementation of the interface [Test|https://isci.informatik.uni-wuerzburg.de/javadoc/d3web/de/d3web/testing/Test.html] should be implemented. 

! Test object class

One method of the interface Test is getTestObjectClass(). It determines the class of the test object which the test is supposed to be executed on.
%%prettify
{{{
Class<T> getTestObjectClass();
}}}
/%

For example, if a test should run on wiki articles, the method should be implemented like this:
%%prettify
{{{
public Class<Article> getTestObjectClass()
}}}
/%


! Description

Please implement the method getDescription() in a meaningful way, return a concise description about what this test is about. It will be used to generated the documentation table of all available tests of the system, c.f. [Doc CIDashboard].
%%prettify
{{{
String getDescription();
}}}
/%

! Define parameters
The testing framework provides a mechanism for providing additional parameters for the execution of the tests. When a test is implemented, the expected configuration parameters should be defined within the constructor, using the addParameter()-method. In the following example, a parameter called "SearchString" which is a regular expression being mandatory. Additionally, a user description for this parameter is passed (String constant SEARCH_STRING_DESCRIPTION).

%%prettify
{{{
this.addParameter("SearchString", TestParameter.Type.Regex, TestParameter.Mode.Mandatory,
				SEARCH_STRING_DESCRIPTION);
}}}
/%

The details about parameter definition can be looked up in the class [TestParameter|https://isci.informatik.uni-wuerzburg.de/javadoc/d3web/de/d3web/testing/TestParameter.html]

! Execute

The actual test processing is executed within the method execute() of the Test-interface. The parameters are passed by a String array.
%%prettify
{{{
public static int execute(String[] args) throws IOException
}}}
/%


%%tags
howto
%