stub-react-java-application/README_armtest.md

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
  • 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