Coder Social home page Coder Social logo

java-unit-tests's Introduction

Java-unit-tests

Úlohou cviceni je napisat unit testy na kod, ktory sa nachadza v baliku src/main/java/com/example/demo/widget V tomto balíku je jednoducha webova aplikacia, ktora umoznuje vytvoriť, editovat, precitat alebo vymazať widgety. Widgety su ulozene v DB, k tym sa pristupuje pomocou triedy WidgetRepository a logika je umiestnená v triede WidgetService. Image of widget arch

How to run tests

Testy je mozne spustit priamo cez intellij. Na lavo od nazvu konkretneho testu alebo testovacej triedy je zelena sipka. Po kliknuti na nu je mozne spustit konkretny test alebo v pripade nazvu danej triedy je mozne spustit vsetky testy v konkretnej triedy.

How to run tests with coverage

Taktiez je možné spustit testy spolu s coverage. Ten nam na pravej strane zobrazi nazov pokrytej triedy spolu s %, kolko tried, metod a riadkov kodu je pokrytich vykonanymi testami. Po dvojkliku v pravo na triedu sa otvori v novom tabe a kazdy riadok kodu ma naľavo bud zelenu (je otestovany) alebo cervenu farbu (nie je otestovany).

Repository tests

Ulohou je doplnit chybajuce testy do test triedy v src/test/java/com/example/demo/widget/repository/WidgetRepositoryTest.java. Testy su oznacene anotaciou @Test a mockovane data, ktore pouzivaju su nastavene pomocou anotacie @DataSet("widgets.yml") v subore src/test/resources/datasets/widgets.yml

widget:
- id: 1
  name: "Widget 1"
  description: "This is widget 1"
  version: 1
- id: 2
  name: "Widget 2"
  description: "This is widget 2"
  version: 7

V jednotlivych testoch sa volaju metody z WidgetRepository triedy: repository.findAll() a pomocou assert funckcii z Assertions triedy sa testuju vratene hodnoty:

Assertions.assertEquals(2, widgets.size(), "Expected 2 widgets in the database");

Podobne doplnte ostatne prazde testovacie metody.

Service tests

Testy na WidgetService je potrebne doplnit to triedy src/test/java/com/example/demo/widget/service/WidgetServiceTest.java Tato trieda obsahuje mock WidgetRepository, ktorej metody je mozne namockovat pomocou prikazu:

Widget widget = new Widget(1l, "Widget Name", "Description", 1);
doReturn(Optional.of(widget)).when(repository).findById(1l);

Nasledne sa zavola metoda, ktoru ideme testovat

Optional<Widget> returnedWidget = service.findById(1l);

a zase pomocou Assertions.assert* metod, skontrolujeme vysledok

Assertions.assertTrue(returnedWidget.isPresent(), "Widget was found");
Assertions.assertSame(returnedWidget.get(), widget, "The widget returned was the same as the mock");

Podobne doplnte ostatne prazde testovacie metody vo WidgetServiceTest.java triede.

Controller tests

Controller testy sa nachadzaju v triede WidgetRestControllerTest.java a testuju API definovane vo WidgetRestController triede. Pomocou triedy MockMvc je mozne vykonat request (get,post,put,delete) a otestovat funcionality daneho endpointu.

priklad: https://howtodoinjava.com/spring-boot2/testing/spring-boot-mockmvc-example/

Ako prve je potrebne namockovat data pomocou doReturn metody

Widget widget1 = new Widget(1l, "Widget Name", "Description", 1);
Widget widget2 = new Widget(2l, "Widget 2 Name", "Description 2", 4);
doReturn(Lists.newArrayList(widget1, widget2)).when(service).findAll();

a potom pomocou mockmvc vykonat call na dany endpoint a otestovat, ci nam to vratil spravne hodnoty pomocou .andExpect metody

mockMvc.perform(get("/rest/widgets"))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$", hasSize(2)))
.andExpect(jsonPath("$[0].id", is(1)))
.andExpect(jsonPath("$[0].name", is("Widget Name")))
.andExpect(jsonPath("$[0].description", is("Description")))
.andExpect(jsonPath("$[0].version", is(1)))
.andExpect(jsonPath("$[1].id", is(2)))
.andExpect(jsonPath("$[1].name", is("Widget 2 Name")))
.andExpect(jsonPath("$[1].description", is("Description 2")))
.andExpect(jsonPath("$[1].version", is(4)));

java-unit-tests's People

Contributors

kikoosvk avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.