Compare commits

..
8 Commits
14 changed files with 204 additions and 9 deletions
@@ -0,0 +1,13 @@
package space.kklochko.simple_jbdd.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Given {
String value() default "Given";
}
@@ -0,0 +1,13 @@
package space.kklochko.simple_jbdd.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Then {
String value() default "Then";
}
@@ -0,0 +1,13 @@
package space.kklochko.simple_jbdd.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Title {
String value() default "Title";
}
@@ -0,0 +1,13 @@
package space.kklochko.simple_jbdd.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface When {
String value() default "When";
}
@@ -1,8 +0,0 @@
package space.kklochko.simple_jbdd.test_examples;
public class Sum {
static int sum(int a, int b) {
return a + b;
}
}
@@ -0,0 +1,8 @@
package space.kklochko.simple_jbdd.test_examples.samples;
public class Sum {
public static int sum(int a, int b) {
return a + b;
}
}
@@ -0,0 +1,15 @@
package space.kklochko.simple_jbdd.test_examples.tests;
import space.kklochko.simple_jbdd.annotations.Then;
import space.kklochko.simple_jbdd.annotations.Title;
import space.kklochko.simple_jbdd.tests.Test;
@Title("A Simple Failed GivenWhenTest for Sum")
public class SimpleFailedThenTest extends Test {
@Then
public void check() {
assert 30 == 10 + 20 + 1;
}
}
@@ -0,0 +1,32 @@
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 GivenWhenTest for Sum")
public class SimpleGivenWhenThenTest extends Test {
private Sum sum;
private int a;
private int b;
@Given
void setup() {
sum = new Sum();
}
@When
void trigger() {
a = 10;
b = 20;
}
@Then
void check() {
assert 30 == sum.sum(a, b);
}
}
@@ -0,0 +1,14 @@
package space.kklochko.simple_jbdd.test_examples.tests;
import space.kklochko.simple_jbdd.annotations.Then;
import space.kklochko.simple_jbdd.annotations.Title;
import space.kklochko.simple_jbdd.tests.Test;
@Title("Simple test")
public class SimpleThenTest extends Test {
@Then("The sum of 10 and 20 is 30.")
public void check() {
assert 30 == 10 + 20;
}
}
@@ -0,0 +1,13 @@
package space.kklochko.simple_jbdd.test_examples.tests;
import space.kklochko.simple_jbdd.annotations.Then;
import space.kklochko.simple_jbdd.annotations.Title;
import space.kklochko.simple_jbdd.tests.Test;
public class SimpleThenTestWithoutTitle extends Test {
@Then("The sum of 10 and 20 is 30.")
public void check() {
assert 30 == 10 + 20;
}
}
@@ -0,0 +1,6 @@
package space.kklochko.simple_jbdd.tests;
public abstract class Test {
}
@@ -0,0 +1,40 @@
package space.kklochko.simple_jbdd.tests.factories;
import space.kklochko.simple_jbdd.annotations.Given;
import space.kklochko.simple_jbdd.annotations.Then;
import space.kklochko.simple_jbdd.annotations.When;
import space.kklochko.simple_jbdd.tests.Test;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.TreeMap;
public class TestCommandFactory {
public <T extends Test> void create(T input) {
Class<?> aClass = input.getClass();
Map<String, Method> test_methods = this.getTestMethods(aClass);
}
protected <T extends Test> Map<String, Method> getTestMethods(Class<?> aClass) {
Map<String, Method> test_methods = new TreeMap<String, Method>();
for(Method method : aClass.getDeclaredMethods()) {
Annotation[] annotations = method.getAnnotations();
if (annotations.length == 0)
continue;
if(method.isAnnotationPresent(Given.class))
test_methods.put("Given", method);
if(method.isAnnotationPresent(When.class))
test_methods.put("When", method);
if(method.isAnnotationPresent(Then.class))
test_methods.put("Then", method);
}
return test_methods;
}
}
@@ -1,5 +1,6 @@
package space.kklochko.simple_jbdd.test_examples
package space.kklochko.simple_jbdd.test_examples.samples
import space.kklochko.simple_jbdd.test_examples.samples.Sum
import spock.lang.Specification
class SumSpec extends Specification {
@@ -0,0 +1,22 @@
package space.kklochko.simple_jbdd.tests.factories
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
import space.kklochko.simple_jbdd.tests.factories.TestCommandFactory;
import spock.lang.Specification
class TestCommandFactorySpec extends Specification {
def "If the map of methods have one test block."() {
given: "I have a TestCommandFactory object"
def factory = new TestCommandFactory();
and: "I also have a SimpleThenTest object"
def simpleThenTest = new SimpleThenTest()
when: "If a test have only one block"
def map = factory.getTestMethods(simpleThenTest.getClass())
then: "the map size is 1 method"
1 == map.size()
}
}