4.3 KiB
ARMTEST
Funzionalità per il run di test su progetti Armundia.
Basic usage
Dipendenza da utilizzare:
<dependency>
<groupId>com.armundia.tech</groupId>
<artifactId>armtest</artifactId>
<version>1.0.2</version>
</dependency>
Utilizzo per una classe di test (con o senza @Testable
) e metodi @Test
:
class MioPrimoTest extends ArmUnitTest {
@Inject
private CdiTestService service;
@Test
void test01_base() {
String info = service.readInfo();
assertNotNull(info, "info must be not null");
}
}
da notare l'uso di una classe base ArmUnitTest
per i test.
Questo permetterà di avere:
- supporto completo CDI (auto discovery anche su più jar dei bean)
- unico limite: i bean devono essere esplicitamente indicati con un'annotazione
@Dependent
,@RequestScoped
,@SessionScoped
o@ApplicationScoped
- unico limite: i bean devono essere esplicitamente indicati con un'annotazione
- supporto
@PersistenceContext
(normalmente disponibile solo in contesto Enterprise)
supporto scenari DB via file H2
@Scenario(name = "one", order = 1)
class ScenarioOne extends ArmUnitTest {
@Inject
private OneService service;
@Test
void test01_query() {
List<ApDom> dom = service.getApDom("CMA_ASSET_CLASS_INFO");
assertTrue(!dom.isEmpty(), "dominio CMA_ASSET_CLASS_INFO vuoto/non trovato");
}
}
Dove il servizio OneService
è, ad esempio, con accesso al db tramite EntityManager
:
@Dependent
public class OneService {
@PersistenceContext
private EntityManager em;
public List<ApDom> getApDom(String cod) {
TypedQuery<ApDom> query = em.createQuery("SELECT a FROM ApDom a WHERE a.id.codCampo = :cod", ApDom.class);
query.setParameter("cod", cod);
return query.getResultList();
}
}
userà il database per lo scenario one
che corrisponde al database, H2, in:
resources\META-INF\scenarios
one.mv.db
a cui corrisponde il file:
one.trace.db
Oltre questa modalità con i file .db
, è supportato il recupero di tali file da un file .zip
(per ridurre lo spazio utilizzato).
Altre modalità supportate:
script aggiuntivo a partire da un database esistente:
@Scenario(name = "one", scripts = "META-INF/scenarios/add-datas.sql")
script db completo a partire da un database vuoto (in memoria):
@Scenario(name = "one", asResource=false, scripts = "META-INF/scenarios/from-scratch.sql")
script db multipli a partire da un database vuoto in memoria (base non esiste come risorsa):
@Scenario(name = "base", scripts = "META-INF/scenarios/from-scratch.sql,META-INF/scenarios/more.sql")
Auto test per tutti i Pojo di un package (!)
List<String> errors = ArmTest.instance().testPojosInPackage("com.armundia.armtest.testpojo");
// eventualmente aggiungere un controllo, ma già la riga precedente
// aumenta la coverage richiamando tanti get/set
assertEquals(0, errors.size(), "expected no errors");
Oppure:
List<String> errors = ArmTest.instance().testPojos(
null, // nessuna annotation in particolare
"com.armundia.armtest.testpojo", "com.armundia.armtest.testpojo");
// eventualmente aggiungere un controllo, ma già la riga precedente
// aumenta la coverage richiamando tanti get/set
assertEquals(0, errors.size(), "expected no errors");
MAVEN run test commands
da bash shell:
mvn test
con report coverage:
mvn test jacoco:report
Future features
- verifica supporto Rest JAX-RS
Release commands
Follow the steps to release a maven package into Nexus Repository
Assure that the pom.xml
has the <scm>
tag that points to the git developer connection and manage takes the HEAD commit of your repository.
<scm>
<developerConnection>scm:git:{git-http-connection}</developerConnection>
<tag>HEAD</tag>
</scm>
mvn release:clean
mvn release:prepare
After, if it goes all well, push the commits and the tag created by the execution and run:
mvn release:perform
If something about mvn release:perform
goes wrong and we want to revert all the release
stuff, we need to remove the commit and tag created by the execution and run:
mvn release:rollback
Release
Qui sono indicate le release finora effettuate.
Next Release
1.0.2
Major release con:
- supporto CDI/Junit 5
- supporto scenari di test db, basati su h2
0.0.1
- Released the package... TODO