Compare commits

...
6 Commits
Author SHA1 Message Date
KKlochko a258a5f785 Update the build configuration to make the JAR file.
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2023-10-15 12:59:04 +03:00
KKlochko f384ce5fe5 Add SimpleEmptyTest and its tests.
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2023-10-15 12:37:56 +03:00
KKlochko 5c1e69ed32 Add the error for an empty test.
continuous-integration/drone/tag Build is passing
2023-10-15 12:35:18 +03:00
KKlochko 2e12fdbd34 Update the titles for SimpleFailedThenTest and SimpleGivenWhenThenTest.
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2023-10-15 12:11:56 +03:00
KKlochko 95a29a14fe Update the tests to test the multi-block test.
continuous-integration/drone/tag Build is passing
2023-10-15 12:10:33 +03:00
KKlochko d69cf31964 Add a multi-block test. 2023-10-15 12:02:24 +03:00
12 changed files with 163 additions and 48 deletions
+11 -1
View File
@@ -1,11 +1,21 @@
plugins { plugins {
id('groovy') id('groovy')
id('application')
id 'com.github.johnrengelman.shadow' version '7.1.2'
} }
version = "1.0" version = "1.0"
description = "simple-jbdd is a simple BDD testing framework for Java." description = "simple-jbdd is a simple BDD testing framework for Java."
// Spock works with Java 1.8 and above application {
mainClassName = 'space.kklochko.simple_jbdd.Main'
}
shadowJar {
mergeServiceFiles()
minimize()
}
java { java {
toolchain { toolchain {
languageVersion.set(JavaLanguageVersion.of(17)) languageVersion.set(JavaLanguageVersion.of(17))
+26 -11
View File
@@ -18,6 +18,32 @@
<build> <build>
<plugins> <plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<archive>
<manifest>
<mainClass>space.kklochko.simple_jbdd.Main</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Mandatory plugins for using Spock --> <!-- Mandatory plugins for using Spock -->
<plugin> <plugin>
<!-- The gmavenplus plugin is used to compile Groovy code. To learn more about this plugin, <!-- The gmavenplus plugin is used to compile Groovy code. To learn more about this plugin,
@@ -124,16 +150,5 @@
<version>2.2</version> <version>2.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- Dependencies used by examples in this project (not required for using Spock) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.222</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy-sql</artifactId>
<version>${groovy.version}</version>
</dependency>
</dependencies> </dependencies>
</project> </project>
@@ -0,0 +1,12 @@
package space.kklochko.simple_jbdd.test_examples.tests;
import space.kklochko.simple_jbdd.annotations.Title;
import space.kklochko.simple_jbdd.tests.Test;
@Title("A Simple Empty Test for Sum")
public class SimpleEmptyTest extends Test {
public void check() {
assert 30 == 10 + 20 + 1;
}
}
@@ -5,7 +5,7 @@ import space.kklochko.simple_jbdd.annotations.Title;
import space.kklochko.simple_jbdd.tests.Test; import space.kklochko.simple_jbdd.tests.Test;
@Title("A Simple Failed GivenWhenTest for Sum") @Title("A Simple Failed Then Test for Sum")
public class SimpleFailedThenTest extends Test { public class SimpleFailedThenTest extends Test {
@Then @Then
public void check() { public void check() {
@@ -0,0 +1,51 @@
package space.kklochko.simple_jbdd.test_examples.tests;
import space.kklochko.simple_jbdd.annotations.Given;
import space.kklochko.simple_jbdd.annotations.Then;
import space.kklochko.simple_jbdd.annotations.Title;
import space.kklochko.simple_jbdd.annotations.When;
import space.kklochko.simple_jbdd.test_examples.samples.Sum;
import space.kklochko.simple_jbdd.tests.Test;
@Title("A Simple GivenGivenWhenWhenThenThen Test for Sum")
public class SimpleGivenGivenWhenWhenThenThenTest extends Test {
private Sum sum;
private int a;
private int b;
private int c;
private int resultAB;
private int resultCB;
@Given("Create the Sum object")
void setup() {
sum = new Sum();
}
@Given("Setup the arguments")
void setupArgs() {
a = 10;
b = 20;
c = 30;
}
@When("Call the .sum(10, 20)")
void triggerAB() {
resultAB = sum.sum(a, b);
}
@When("Call the .sum(30, 20)")
void triggerCB() {
resultCB = sum.sum(c, b);
}
@Then("10 + 20 is 30")
void checkAB() {
assert 30 == resultAB;
}
@Then("30 + 20 is 50")
void checkCB() {
assert 50 == resultCB;
}
}
@@ -7,7 +7,7 @@ import space.kklochko.simple_jbdd.annotations.When;
import space.kklochko.simple_jbdd.test_examples.samples.Sum; import space.kklochko.simple_jbdd.test_examples.samples.Sum;
import space.kklochko.simple_jbdd.tests.Test; import space.kklochko.simple_jbdd.tests.Test;
@Title("A Simple GivenWhenTest for Sum") @Title("A Simple GivenWhenThen Test for Sum")
public class SimpleGivenWhenThenTest extends Test { public class SimpleGivenWhenThenTest extends Test {
private Sum sum; private Sum sum;
private int a; private int a;
@@ -0,0 +1,20 @@
package space.kklochko.simple_jbdd.tests.commands.decorators;
import space.kklochko.simple_jbdd.tests.Test;
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
public class ErrorDecorator<T extends Test> extends AbstractDecorator<T> {
public ErrorDecorator(String error_label, AbstractTestCommand<T> command, String type) {
super(error_label, command);
setType(type);
}
public boolean test() {
return false;
}
public boolean runMethod() {
return false;
};
}
@@ -8,6 +8,7 @@ import space.kklochko.simple_jbdd.tests.Test;
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand; import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
import space.kklochko.simple_jbdd.tests.commands.SimpleTestCommand; import space.kklochko.simple_jbdd.tests.commands.SimpleTestCommand;
import space.kklochko.simple_jbdd.tests.commands.decorators.BlockDecorator; import space.kklochko.simple_jbdd.tests.commands.decorators.BlockDecorator;
import space.kklochko.simple_jbdd.tests.commands.decorators.ErrorDecorator;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@@ -20,6 +21,9 @@ public class TestCommandFactory {
AbstractTestCommand<Test> aTestCommand = createTest(aClass, input); AbstractTestCommand<Test> aTestCommand = createTest(aClass, input);
if(test_methods.size() == 0)
return new ErrorDecorator("ERROR!!! No blocks!!!", aTestCommand, "Error");
if(test_methods.containsKey("Then")) { if(test_methods.containsKey("Then")) {
ArrayList<Method> thens = getMethodsInReverseOrder(test_methods, "Then"); ArrayList<Method> thens = getMethodsInReverseOrder(test_methods, "Then");
for(Method then : thens) { for(Method then : thens) {
@@ -1,5 +1,7 @@
package space.kklochko.simple_jbdd.tests.factories package space.kklochko.simple_jbdd.tests.factories
import space.kklochko.simple_jbdd.test_examples.tests.SimpleEmptyTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenGivenWhenWhenThenThenTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle
@@ -14,19 +16,28 @@ those tests check if factory generate them right.
""") """)
@Title("Unit tests for TestCommandFactory") @Title("Unit tests for TestCommandFactory")
class TestCommandFactorySpec extends Specification { class TestCommandFactorySpec extends Specification {
def "If the map of methods have one test block."() { def "The command have the same block count."() {
given: "I have a TestCommandFactory object" given: "I have a TestCommandFactory object"
@Subject @Subject
def factory = new TestCommandFactory(); def factory = new TestCommandFactory();
and: "I also have a SimpleThenTest object" when: "If a test command have blocks"
def simpleThenTest = new SimpleThenTest() def map = factory.getTestMethods(testClass.getClass())
when: "If a test have only one block" def count = map.values()
def map = factory.getTestMethods(simpleThenTest.getClass()) .stream()
.map {it.size()}
.reduce(0) { acc, num -> acc + num }
then: "the map size is 1 method" then: "the command have the expected block count"
1 == map.size() expectedBlockCount == count
where:
testClass || expectedBlockCount
new SimpleEmptyTest() || 0
new SimpleThenTest() || 1
new SimpleGivenWhenThenTest() || 3
new SimpleGivenGivenWhenWhenThenThenTest() || 6
} }
def "createTest() sets the title to a class name if no Title annotation."() { def "createTest() sets the title to a class name if no Title annotation."() {
@@ -63,34 +74,22 @@ class TestCommandFactorySpec extends Specification {
title == test.getLabels()['Title'] title == test.getLabels()['Title']
} }
def "createTest() build a Test with only Then."() { def "createTest() build a TestCommand that contains the expected blocks."() {
given: "I have a test factory" given: "I have a test factory"
@Subject @Subject
def factory = new TestCommandFactory() def factory = new TestCommandFactory()
and: "I have a test class with Title"
def testClass = new SimpleThenTest()
when: "I build a test" when: "I build a test"
def test = factory.create(testClass) def test = factory.create(testClass)
then: "The test have title and then method" then: "The test have the expected blocks"
['Title', 'Then'].toSet() == test.getLabels().keySet() expectedBlocks.toSet() == test.getLabels().keySet()
}
def "createTest() build a Test with Given-When-Then."() { where:
given: "I have a test factory" testClass || expectedBlocks
@Subject new SimpleThenTest() || ['Title', 'Then']
def factory = new TestCommandFactory() new SimpleGivenWhenThenTest() || ['Title', 'Given', 'When', 'Then']
new SimpleGivenGivenWhenWhenThenThenTest() || ['Title', 'Given', 'When', 'Then']
and: "I have a test class with Title and Given-When-Then"
def testClass = new SimpleGivenWhenThenTest()
when: "I build a test"
def test = factory.create(testClass)
then: "The test have title and then method"
['Title', 'Given', 'When', 'Then'].toSet() == test.getLabels().keySet()
} }
} }
@@ -22,7 +22,7 @@ class IntegratedClassLoader extends Specification {
def classes = loader.load() def classes = loader.load()
then: "Checking that the test result is expected" then: "Checking that the test result is expected"
3 == classes.size() 5 == classes.size()
} }
def "The classes must be represent the Test interface."() { def "The classes must be represent the Test interface."() {
@@ -19,7 +19,7 @@ class IntegratedNameClassLoader extends Specification {
def classNames = loader.load() def classNames = loader.load()
then: "Checking that the test result is expected" then: "Checking that the test result is expected"
3 == classNames.size() 5 == classNames.size()
} }
} }
@@ -1,6 +1,8 @@
package space.kklochko.simple_jbdd.tests.runners package space.kklochko.simple_jbdd.tests.runners
import space.kklochko.simple_jbdd.test_examples.tests.SimpleEmptyTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleFailedThenTest import space.kklochko.simple_jbdd.test_examples.tests.SimpleFailedThenTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenGivenWhenWhenThenThenTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest import space.kklochko.simple_jbdd.test_examples.tests.SimpleGivenWhenThenTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle
@@ -38,5 +40,7 @@ class IntegratedSimpleTestRunnerSpec extends Specification {
new SimpleGivenWhenThenTest() || true new SimpleGivenWhenThenTest() || true
new SimpleThenTestWithoutTitle() || true new SimpleThenTestWithoutTitle() || true
new SimpleFailedThenTest() || false new SimpleFailedThenTest() || false
new SimpleGivenGivenWhenWhenThenThenTest() || true
new SimpleEmptyTest() || false
} }
} }