Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db0c3da413 | ||
|
|
75e30ddae9 | ||
|
|
9056c8d047 | ||
|
|
a1b85e3771 | ||
|
|
0683be643f | ||
|
|
e67bdc4bb0 | ||
|
|
9a14ea6486 | ||
|
|
1549f85a49 |
+24
@@ -0,0 +1,24 @@
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: gradle
|
||||
|
||||
steps:
|
||||
- name: test
|
||||
image: gradle:8.3.0-jdk17-graal
|
||||
commands:
|
||||
- gradle assemble
|
||||
- gradle check
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: maven
|
||||
|
||||
steps:
|
||||
- name: test
|
||||
image: maven:3.9.4-eclipse-temurin-17-alpine
|
||||
commands:
|
||||
- mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
|
||||
- mvn test -B
|
||||
|
||||
@@ -28,6 +28,11 @@ public class BlockDecorator<T extends Test> extends AbstractDecorator<T> {
|
||||
method.invoke(getCommand().getObject());
|
||||
return true;
|
||||
} catch (InvocationTargetException e) {
|
||||
Throwable exception = e.getCause();
|
||||
|
||||
if(exception instanceof AssertionError)
|
||||
throw (AssertionError) exception;
|
||||
|
||||
System.err.println(e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
} catch (IllegalAccessException e) {
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package space.kklochko.simple_jbdd.tests.factories;
|
||||
|
||||
import space.kklochko.simple_jbdd.tests.Test;
|
||||
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
|
||||
import space.kklochko.simple_jbdd.tests.runners.AbstractTestRunner;
|
||||
|
||||
public abstract class AbstractTestRunnerFactory {
|
||||
public abstract AbstractTestRunner create(AbstractTestCommand<Test> command);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package space.kklochko.simple_jbdd.tests.factories;
|
||||
|
||||
import space.kklochko.simple_jbdd.tests.Test;
|
||||
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
|
||||
import space.kklochko.simple_jbdd.tests.runners.AbstractTestRunner;
|
||||
import space.kklochko.simple_jbdd.tests.runners.SimpleTestRunner;
|
||||
|
||||
public class SimpleTestRunnerFactory extends AbstractTestRunnerFactory {
|
||||
public AbstractTestRunner create(AbstractTestCommand<Test> command) {
|
||||
return new SimpleTestRunner(command);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package space.kklochko.simple_jbdd.tests.factories;
|
||||
|
||||
import space.kklochko.simple_jbdd.tests.Test;
|
||||
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class TestCommandQueueFactory {
|
||||
private ArrayList<Test> tests;
|
||||
private TestCommandFactory factory;
|
||||
|
||||
public TestCommandQueueFactory(ArrayList<Test> tests, TestCommandFactory factory) {
|
||||
setTests(tests);
|
||||
setFactory(factory);
|
||||
}
|
||||
|
||||
public ArrayList<AbstractTestCommand<Test>> create() {
|
||||
ArrayList<AbstractTestCommand<Test>> commands = new ArrayList<AbstractTestCommand<Test>>();
|
||||
|
||||
for(Test test : getTests()) {
|
||||
AbstractTestCommand<Test> command = getFactory().create(test);
|
||||
commands.add(command);
|
||||
}
|
||||
|
||||
return commands;
|
||||
}
|
||||
|
||||
public ArrayList<Test> getTests() {
|
||||
return tests;
|
||||
}
|
||||
|
||||
public void setTests(ArrayList<Test> tests) {
|
||||
this.tests = tests;
|
||||
}
|
||||
|
||||
public TestCommandFactory getFactory() {
|
||||
return factory;
|
||||
}
|
||||
|
||||
public void setFactory(TestCommandFactory factory) {
|
||||
this.factory = factory;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package space.kklochko.simple_jbdd.tests.loaders;
|
||||
|
||||
public class SingleClassLoader {
|
||||
String className;
|
||||
|
||||
public SingleClassLoader(String className) {
|
||||
setClassName(className);
|
||||
}
|
||||
|
||||
public Class<?> load() {
|
||||
try {
|
||||
return Class.forName(getClassName());
|
||||
} catch (ClassNotFoundException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getClassName() {
|
||||
return className;
|
||||
}
|
||||
|
||||
public void setClassName(String className) {
|
||||
this.className = className;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package space.kklochko.simple_jbdd.tests.runners;
|
||||
|
||||
public abstract class AbstractTestRunner {
|
||||
public abstract boolean run();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package space.kklochko.simple_jbdd.tests.runners;
|
||||
|
||||
import space.kklochko.simple_jbdd.tests.Test;
|
||||
import space.kklochko.simple_jbdd.tests.commands.AbstractTestCommand;
|
||||
|
||||
public class SimpleTestRunner extends AbstractTestRunner {
|
||||
private AbstractTestCommand<Test> command;
|
||||
|
||||
public SimpleTestRunner(AbstractTestCommand<Test> command) {
|
||||
setCommand(command);
|
||||
}
|
||||
|
||||
public boolean run() {
|
||||
try {
|
||||
return getCommand().test();
|
||||
}catch (AssertionError e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public AbstractTestCommand<Test> getCommand() {
|
||||
return command;
|
||||
}
|
||||
|
||||
public void setCommand(AbstractTestCommand<Test> command) {
|
||||
this.command = command;
|
||||
}
|
||||
}
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package space.kklochko.simple_jbdd.tests.factories
|
||||
|
||||
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.SimpleThenTestWithoutTitle
|
||||
import space.kklochko.simple_jbdd.tests.Test
|
||||
import spock.lang.Narrative
|
||||
import spock.lang.Specification
|
||||
import spock.lang.Subject
|
||||
import spock.lang.Title
|
||||
|
||||
@Narrative("""The factory must generate a queue of the test commands, so
|
||||
those tests check if factory generate them right.
|
||||
""")
|
||||
@Title("Integrated tests for TestCommandQueueFactory")
|
||||
class IntegratedTestCommandQueueFactorySpec extends Specification {
|
||||
def "Factory generate the queue and its size is 2."() {
|
||||
given: "I have a list of tests"
|
||||
def tests = [new SimpleThenTest(), new SimpleThenTestWithoutTitle()]
|
||||
|
||||
and: "I have a test factory"
|
||||
def testFactory = new TestCommandFactory()
|
||||
|
||||
and: "I have a factory"
|
||||
@Subject
|
||||
def factory = new TestCommandQueueFactory(tests, testFactory)
|
||||
|
||||
when: "Factory build the queue"
|
||||
def queue = factory.create()
|
||||
|
||||
then: "the size is 2"
|
||||
2 == queue.size()
|
||||
}
|
||||
|
||||
def "Factory generate the queue and the commands and test order is the same."() {
|
||||
given: "I have a list of tests with first methods [check, setup]"
|
||||
def tests = [new SimpleThenTest(), new SimpleGivenWhenThenTest()]
|
||||
|
||||
and: "I have a test factory"
|
||||
def testFactory = new TestCommandFactory()
|
||||
|
||||
and: "I have a factory"
|
||||
@Subject
|
||||
def factory = new TestCommandQueueFactory(tests, testFactory)
|
||||
|
||||
when: "Factory build the queue"
|
||||
def queue = factory.create()
|
||||
|
||||
then: "the order is the same"
|
||||
queue[0].method.getName() == "check"
|
||||
queue[1].method.getName() == "setup"
|
||||
}
|
||||
}
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package space.kklochko.simple_jbdd.tests.factories
|
||||
|
||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
|
||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTestWithoutTitle
|
||||
import space.kklochko.simple_jbdd.tests.Test
|
||||
import space.kklochko.simple_jbdd.tests.commands.decorators.BlockDecorator
|
||||
import spock.lang.Narrative
|
||||
import spock.lang.Specification
|
||||
import spock.lang.Subject
|
||||
import spock.lang.Title
|
||||
|
||||
@Narrative("""The factory must generate a queue of the test commands, so
|
||||
those tests check if factory generate them right.
|
||||
""")
|
||||
@Title("Unit tests for TestCommandQueueFactory")
|
||||
class TestCommandQueueFactorySpec extends Specification {
|
||||
def "Factory generate the queue and its size is 2."() {
|
||||
given: "I have a list of tests"
|
||||
def tests = [Mock(SimpleThenTest), Mock(SimpleThenTestWithoutTitle)]
|
||||
|
||||
and: "I have a test factory"
|
||||
def testFactory = Stub(TestCommandFactory)
|
||||
testFactory.create() >>> [Mock(BlockDecorator<Test>)]*2
|
||||
|
||||
and: "I have the factory"
|
||||
@Subject
|
||||
def factory = new TestCommandQueueFactory(tests, testFactory)
|
||||
|
||||
when: "Factory build the queue"
|
||||
def queue = factory.create()
|
||||
|
||||
then: "the size is 2"
|
||||
2 == queue.size()
|
||||
}
|
||||
}
|
||||
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package space.kklochko.simple_jbdd.tests.loaders
|
||||
|
||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest
|
||||
import spock.lang.Narrative
|
||||
import spock.lang.Specification
|
||||
import spock.lang.Subject
|
||||
import spock.lang.Title
|
||||
|
||||
@Narrative("""The loader must return a class or null, so
|
||||
those tests check if responses are right.
|
||||
""")
|
||||
@Title("Integrated tests for ClassLoader.")
|
||||
class IntegratedSingleClassLoader extends Specification {
|
||||
def "The class has been run."() {
|
||||
given: "I have a class loader"
|
||||
@Subject
|
||||
def loader = new SingleClassLoader(className);
|
||||
|
||||
when: "The class was loaded"
|
||||
def aClass = loader.load()
|
||||
|
||||
then: "Checking that the test result is expected"
|
||||
aClass == expectedClass
|
||||
|
||||
where: "Possible variants of tests"
|
||||
className || expectedClass
|
||||
"fourHundredFour" || null
|
||||
"space.kklochko.simple_jbdd.test_examples.tests.SimpleThenTest" || SimpleThenTest
|
||||
}
|
||||
}
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package space.kklochko.simple_jbdd.tests.runners
|
||||
|
||||
import space.kklochko.simple_jbdd.test_examples.tests.SimpleFailedThenTest
|
||||
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.SimpleThenTestWithoutTitle
|
||||
import space.kklochko.simple_jbdd.tests.factories.TestCommandFactory
|
||||
import spock.lang.Narrative
|
||||
import spock.lang.Specification
|
||||
import spock.lang.Subject
|
||||
import spock.lang.Title
|
||||
|
||||
@Narrative("""The runner must return a result of test, so
|
||||
those tests check if passed and failed test generate the right result.
|
||||
""")
|
||||
@Title("Integrated tests for SimpleTestRunner with TestCommandFactory and test examples")
|
||||
class IntegratedSimpleTestRunnerSpec extends Specification {
|
||||
def "The real test has been run."() {
|
||||
given: "I have a factory"
|
||||
def factory = new TestCommandFactory();
|
||||
|
||||
and: "I have a testCommand created from a test object"
|
||||
def test = factory.create(testObject)
|
||||
|
||||
and: "I have a test runner"
|
||||
@Subject
|
||||
def runner = new SimpleTestRunner(test)
|
||||
|
||||
when: "The testCommand has been run"
|
||||
def result = runner.run()
|
||||
|
||||
then: "Checking that the test result is expected"
|
||||
result == expectedResult
|
||||
|
||||
where: "Possible variants of tests"
|
||||
testObject || expectedResult
|
||||
new SimpleThenTest() || true
|
||||
new SimpleGivenWhenThenTest() || true
|
||||
new SimpleThenTestWithoutTitle() || true
|
||||
new SimpleFailedThenTest() || false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package space.kklochko.simple_jbdd.tests.runners
|
||||
|
||||
import space.kklochko.simple_jbdd.tests.commands.SimpleTestCommand
|
||||
import space.kklochko.simple_jbdd.tests.factories.TestCommandFactory
|
||||
import spock.lang.Narrative
|
||||
import spock.lang.Specification
|
||||
import spock.lang.Subject
|
||||
import spock.lang.Title
|
||||
|
||||
@Narrative("""The runner must return a result of test, so
|
||||
those tests check if passed and failed test generate the right result.
|
||||
""")
|
||||
@Title("Unit tests for SimpleTestRunner")
|
||||
class SimpleTestRunnerSpec extends Specification {
|
||||
def "The test with then has been passed."() {
|
||||
given: "I have a testCommand"
|
||||
def test = Stub(SimpleTestCommand)
|
||||
test.test() >>> [true]
|
||||
|
||||
and: "I have a test runner"
|
||||
@Subject
|
||||
def runner = new SimpleTestRunner(test)
|
||||
|
||||
when: "The testCommand has been run"
|
||||
def result = runner.run()
|
||||
|
||||
then: "The result is true"
|
||||
result
|
||||
}
|
||||
|
||||
def "The test with then that has not been passed."() {
|
||||
given: "I have a failed testCommand"
|
||||
def test = Stub(SimpleTestCommand)
|
||||
test.test() >> { assert 1 == 0 }
|
||||
|
||||
and: "I have a test runner"
|
||||
@Subject
|
||||
def runner = new SimpleTestRunner(test)
|
||||
|
||||
when: "The testCommand has been run"
|
||||
def result = runner.run()
|
||||
|
||||
then: "The result is false"
|
||||
!result
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user