java/scala lab: Юрий Литвиненко - lightning talk

65
Юнни Тест и все-все-все

Upload: geekslab

Post on 11-Jul-2015

292 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Юнни Тести все-все-все

Page 2: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Юра Литвиненко

•Джавист, скалист и тд•http://linkd.in/lytvynenko

•@surg

Page 3: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Мне нравится

Page 4: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Мне нравится

Page 5: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Мне нравится

• Dependency Injection

Page 6: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Мне нравится

• Dependency Injection

• DSL

Page 7: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Dependency Injection

Page 8: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DIinterface  Lorem  {  int  ipsum();}  

Page 9: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DIinterface  Lorem  {  int  ipsum();}  

class  Dolor  {  

}

Page 10: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DIinterface  Lorem  {  int  ipsum();}  

class  Dolor  {  

private  Lorem  lorem;  

}

Page 11: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DIinterface  Lorem  {  int  ipsum();}  

class  Dolor  {  

private  Lorem  lorem;  

public  void  sit()  {  

   lorem.ipsum();  

}  

}

Page 12: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DIinterface  Lorem  {  int  ipsum();}  

class  Dolor  {  

@Inject  private  Lorem  lorem;  

public  void  sit()  {  

   lorem.ipsum();  

}  

}

Page 13: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSL

Page 14: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSL

Page 15: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSLNotification  notification

Page 16: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSLNotification  notification  =            new  Builder()

Page 17: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSLNotification  notification  =            new  Builder()        .to(user)

Page 18: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSLNotification  notification  =            new  Builder()        .to(user)          .subject(msgSubject)  

Page 19: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSLNotification  notification  =            new  Builder()        .to(user)          .subject(msgSubject)                .body(msgBody)                                              

Page 20: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSLNotification  notification  =            new  Builder()        .to(user)          .subject(msgSubject)                .body(msgBody)                                                                          .settings(settings)

Page 21: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSLNotification  notification  =            new  Builder()        .to(user)          .subject(msgSubject)                .body(msgBody)                                                                          .settings(settings)                                                                          .build();

Page 22: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSL

• Читабельно

Page 23: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSL

• Читабельно• Геттеры

Page 24: Java/Scala Lab: Юрий Литвиненко - Lightning talk

DSL

• Читабельно• Геттеры• Сеттеры

Page 25: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Инструменты

• Guice http://code.google.com/p/google-guice/

• TestNG http://testng.org/

• Mockito http://mockito.org

• Fest Asserts http://docs.codehaus.org/display/FEST/Fluent+Assertions+Module

Page 26: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Guice

Page 27: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Guice

Page 28: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Guice

• Информативные сообщения об ошибках

Page 29: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Guice

• Информативные сообщения об ошибках

• Биндинг в коде

Page 30: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Guice

• Информативные сообщения об ошибках

• Биндинг в коде• RI JSR-330

Page 31: Java/Scala Lab: Юрий Литвиненко - Lightning talk

TestNG

Page 32: Java/Scala Lab: Юрий Литвиненко - Lightning talk

TestNG

Page 33: Java/Scala Lab: Юрий Литвиненко - Lightning talk

TestNG

• Альтернатива JUnit

Page 34: Java/Scala Lab: Юрий Литвиненко - Lightning talk

TestNG

• Альтернатива JUnit

• Группировка тестов

Page 35: Java/Scala Lab: Юрий Литвиненко - Lightning talk

TestNG

• Альтернатива JUnit

• Группировка тестов• Зависимости тестов

Page 36: Java/Scala Lab: Юрий Литвиненко - Lightning talk

TestNG

• Альтернатива JUnit

• Группировка тестов• Зависимости тестов• Интеграция с Guice!

Page 37: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito

Page 38: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito

Page 39: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito

• Исчерпывающие сообщения об ошибках

Page 40: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito

• Исчерпывающие сообщения об ошибках

• DSL

Page 41: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito: ПримерList  mocked  =  

Page 42: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito: ПримерList  mocked  =  Mockito.mock(List.class);

Page 43: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito: ПримерList  mocked  =  mock(List.class);  

when(mocked.get(0))

Page 44: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito: ПримерList  mocked  =  mock(List.class);  

when(mocked.get(0)).thenReturn(“first”);

Page 45: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Mockito: ПримерList  mocked  =  mock(List.class);  

when(mocked.get(0)).thenReturn(“first”);  

verify(mocked).get(0);  

Page 46: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Fest Assert

Page 47: Java/Scala Lab: Юрий Литвиненко - Lightning talk

FEST Assert

• DSL

• Минимализм

Page 48: Java/Scala Lab: Юрий Литвиненко - Lightning talk

FEST Assert: ПримерList<String>  newEmployees  =  ...;  

Page 49: Java/Scala Lab: Юрий Литвиненко - Lightning talk

FEST Assert: ПримерList<String>  newEmployees  =  ...;  

assertThat(newEmployees)

Page 50: Java/Scala Lab: Юрий Литвиненко - Lightning talk

FEST Assert: ПримерList<String>  newEmployees  =  ...;  

assertThat(newEmployees)  

   .describedAs(“Employees  hired  today”);

Page 51: Java/Scala Lab: Юрий Литвиненко - Lightning talk

FEST Assert: ПримерList<String>  newEmployees  =  ...;  

assertThat(newEmployees)  

   .describedAs(“Employees  hired  today”)  

   .hasSize(6)

Page 52: Java/Scala Lab: Юрий Литвиненко - Lightning talk

FEST Assert: ПримерList<String>  newEmployees  =  ...;  

assertThat(newEmployees)  

   .describedAs(“Employees  hired  today”)  

   .hasSize(6)  

   .contains(“frodo”,  “sam”);

Page 53: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместе

Page 54: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {  

   @Inject  private  Lorem  lorem;  

   public  void  sit()  {  

   lorem.ipsum();  

   }  

}

Page 55: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {  

   @Inject  private  Lorem  lorem;  

   public  void  sit(Dummy  dummy)  {  

       dummy.setFoo(lorem.ipsum());  

   }  

}

Page 56: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

class  DolorTest  {  

}

Page 57: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

@Guice(modules=TestUnniModule.class)  

class  DolorTest  {  

}

Page 58: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

@Guice(modules=TestUnniModule.class)  

class  DolorTest  {  

   @Inject  private  Dolor  dolor;  

}

Page 59: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

@Guice(modules=TestUnniModule.class)  

class  DolorTest  {  

   @Inject  private  Dolor  dolor;  

   @Test  

   public  void  testSit()  {  

       ...  

   }  

}

Page 60: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

@Guice(modules=TestUnniModule.class)class  DolorTest  {    @Inject  private  Dolor  dolor;    @Test  public  void  testSit()  {  

}

Page 61: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

@Guice(modules=TestUnniModule.class)class  DolorTest  {    @Inject  private  Dolor  dolor;    @Test  public  void  testSit()  {  

Dummy  dummy  =  new  Dummy();  

}

Page 62: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

@Guice(modules=TestUnniModule.class)class  DolorTest  {    @Inject  private  Dolor  dolor;    @Test  public  void  testSit()  {  

Dummy  dummy  =  new  Dummy();  

dolor.sit(dummy);  

}

Page 63: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Все вместеinterface  Lorem  {  int  ipsum();}  

class  Dolor  {    @Inject  private  Lorem  lorem;    public  void  sit(Dummy  dummy)  {...}}

@Guice(modules=TestUnniModule.class)class  DolorTest  {    @Inject  private  Dolor  dolor;    @Test  public  void  testSit()  {  

Dummy  dummy  =  new  Dummy();  

dolor.sit(dummy);  

assertThat(dummy.getFoo).isNotNull();  }

Page 64: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Ссылки

• Проект с примерами со слайдов https://github.com/surg/unni-test

• Guice http://code.google.com/p/google-guice/

• TestNG http://testng.org/

• Mockito http://mockito.org

• Fest Asserts http://docs.codehaus.org/display/FEST/Fluent+Assertions+Module

Page 65: Java/Scala Lab: Юрий Литвиненко - Lightning talk

Спасибо!

@surg