ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Cygnus Unit Test
????? ???
Agenda
? Test?
? TDD
? Database Test
? Service Tier Test
? Web Tier Test
? Test Coverage
?? ???
???? / ?? ???
?? ???
?? ???
??? ??
?? ???
??? ??
? ?? ??? - ??? ?? , ??? ??? ???
?? ( ?? ?? ?? , ?? ?? ) ? ???
? ?? ??? ¨C ?? ? , ??? ? , ?? ???
? ?? ?? ???
? ?? ??? ¨C ??? api ? ?? ?? ?? ??
? , ????? ?? ???
? ???? ??? ¨C jMeter ?? ?? ?? ??
? ?? ??? ¨C ???? ?? ?? ?? QA ?? ?
?
Mockito
Tapestry Test
Test ?? Tools
Spring Test
?? ???
¡° ?? ??? (unit test) ? ?? ???
??? ?? ??? ????? ???
? ??? . ? , ?? ???? ???
? ?? ??? ???? ???? ??
? ??? .¡±
wikipedia.org
Why Unit Test
? ???? ?? ??? ???? ?? ?
?
? ??? ?? ??? ???? ? ??
???? ? ????? ???? ??
? ??? ??? ?? class ? ??? ?
??? ??? ? ??
? ?? ???? ?? ???? ??? ?
? ???? ??? ? ???
Cygnus unit test
Why not Unit Test
? ? ?? ?? ?? ??
? ??? ?? ???
? ??? ???? ?? ??? ??
? ??? ?? ??? ?? ??
?? ??? ??
? Isolated
¨C ??? ??? ? ? ????? ??? ??
? Repeatable
¨C ?? ????? ??? ??
¨C ??? ?? ?? ??
? Fast
¨C ??? ??? .
¨C ?? ??? ??? ??? ?? ? ??? ??
? Self-Documenting
¨C ??? ??? ???? ???? ??? ??
¨C ??? ??? ???? ??? ?? ??? ??
First Unit Test
Public class Calculator {
public double add(double number1, double number2) {
return number1 + number2;
}
}
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculatorTest { ? 1.public class
@Test ? 2.unit test
public void test() {
Calculator calc = new Calculator();
double result = calc.add(10, 20); ? 3. ??????
assertEquals(30, result, 0); ? 4. ?? ??
}
}
First Unit Test ??
Test Driven
Development(TDD)
¡° ?? ??? ????? ?? . ? ??
? ????? .¡±
Cygnus unit test
Cygnus unit test
Cygnus unit test
Cygnus unit test
Cygnus Tier Flow
CreateServer
ServerServic
e
ServerDao
saveServer(server)
saveServer(server)
doSomething(server)
session.save(server)
ViewServer
ServerServic
e
ServerDao
getServerById(id)
getServerById(id)
session.get(Server.class, id
http://.../viewserver/{id}
Server
Web Tier :
Service Tier :
Dao Tier :
Persistent Tier :
Database Test ???
? Isolated
¨C DB ? ??? ??
? Repeatable
¨C Test ? ??? DB ? ????
? Fast
¨C DB ??? ????? ???
¨C DB ?? ??? ???? ???
? ?? ??? ??
? ?? ?? ??
Database Test ??
? Embedded DB(H2, HSQL) ??
¨C Fast
¨C ??? ?? ??? ?? ??
? DbUnit ??
¨C ??? ?? ?? ??
¨C ?? ?? ??? ??
¨C ?? ?? ?? ??
Database Test ??
? ???? ???? ?? ??
¨C DB ??? ?? ? )user, index, unique,
max
¨C ?? DB ?? ? ??
? ??? ????
¨C one-to-many ??? ??? forign ? ??
? ??? ?
¨C Cascade ? ? ????? ?
? ?? ??
¨C ?? ?? ??? ???? ?? ??? ??
?? ??? ?
Database Test Code
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/META-INF/spring/test-applicationContext.xml")
@Transactional
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class
,
TransactionDbUnitTestExecutionListener.class,
DbUnitTestExecutionListener.class })
public class ServerDaoTest {
@Test
@DatabaseSetup("testServer.xml") ?1. ?? ???
@ExpectedDatabase(value="empty.xml", ?2. ?? ??? ??
assertionMode=DatabaseAssertionMode.NON_STRICT)
public void testDeleteServer() {
Server server = serverDao.getById(1);
serverDao.delete(server); ?3. ??? ??
serverDao.flush(); ?4. ORM ?? ???
assertThat(serverDao.findAll().size(), is(0)); ?5. delete ??
}
Service ?? Test ???
? Isolated
¨C ?? ??? / ?? (DAO) ? ???? ??
¨C ?? ??? (Agent, Mail Server, REST)
? ???? ??
? Repeatable
¨C Test ? ??? ?? ??? ???? ??
?
? Fast
¨C ??? ?? ??? ?? ??? ????
Service ?? Test ??
? Stub ?? ??
¨C Stub ?? ?? ??? ???? ????
?? (Agent ????? )
¨C ?? ??? stub ??? ????
¨C Stub ??? ???? ?? ??
? Mock ?? ??
¨C Mock ?? ?? ??? ??? ??? ??
? ???
Service ?? Test ??
? Mock ?? ??
¨C Mock ?? ?? ??? ???? ??
¨C ?? ??? ???? ???? .
¨C Mock Framework ??? ??? ??
? Mockito, EasyMock, Jmock
Service ?? Test ??
@Service
public class ServerServiceImpl implements ServerService {
@Autowired
ServerDao serverDao;
@Transactional
public Server discoveryServer(String ipAddress) {
Server server = serverDao.findServerByIpAddress(ipAddress);
if(server != null) {
throw new ServerDuplicatedException("Duplicated ipAddres=" + ipAddress);
}
Server newServer = new Server();
newServer.setIpAddress(ipAddress);
serverDao.save(newServer);
return newServer;
}
Service ?? Test ??
@RunWith(MockitoJUnitRunner.class) ? 1. mockito ?? ??
public class ServerServiceTest {
@InjectMocks ? 2. mock ??
ServerService serverService = new ServerServiceImpl();
@Mock ? 3. mock ?? ??
ServerDao serverDao;
@Test
public void testDiscoveryServer() {
String ipAddress = "127.0.0.1";
//stub ?4. mock ?? ??
when(serverDao.findServerByIpAddress(ipAddress)).thenReturn(null);
//run
Server server=serverService.discoveryServer(ipAddress); ? 5. ?? ??? ??
//assert
assertThat(server.getIpAddress(), equalTo(ipAddress)); ? 6. ??? ?? ?? ?
?
verify(serverDao).findServerByIpAddress(ipAddress); ? 7. mock ?? ?? ??
verify(serverDao).save(server); ? 8. mock ?? ?? ??
}
Service ?? Test ??
@Test(expected=ServerDuplicatedException.class) ? 1. ?? ?? ? ??
public void testDiscoveryServerDuplicated() {
String ipAddress = "127.0.0.1";
Server existServer = new Server();
when(serverDao.findServerByIpAddress(ipAddress)).thenReturn(existServer); ? 2.
mock ??
Server server = serverService.discoveryServer(ipAddress); ? 3. ??? ?
?? ??
}
Web ?? test ???
? ??? ??? ?? ??? ?? ? ??
¨C template ?? , javascript ?
? ??? / ????? ??? ? ???? ?
??? ???
? ???? validate ?? ??? ??? ?
?? ?? ???
? Isolate
¨C ??? ??? ???? ?? ?? ????
???
? Fast
¨C ? ?????? ?? ? ?? ??? ??
Web ?? ??? ??
? ??? ??? mock ??? ??
? Tapestry Test framework ??
¨C PageTester.renderPage()
¨C PageTester.clickLink()
? Selenium ??? ??
Web ?? ??? ??
public class ViewServerTest {
PageTester tester;
@Before ? 1. test setUp
public void setUp() {
String appPackage = "com.nkia.cygnus.management.server";
String appName = "development";
tester = new PageTester(appPackage, appName, "src/main/webapp",
TestAppModule.class);
}
@Test
public void testExistServer() {
ServerService serverService = tester.getService(ServerService.class); ? 2.
MockServerServic
when(serverService.getServerById(1)).thenReturn(newServer()); ? 3. Mock ?
? ??
Document doc = tester.renderPage("server/ViewServer/1"); ? 4. ?? ??? ???
assertThat(doc.toString(),
containsString("View Server - testserver123456")); ? 4. ?? ??
??
Web ?? ??? ??
// link test
@Test
public void testDeleteNotExistServer() {
ServerService serverService = tester.getService(ServerService.class); ? 1. Mock
??
when(serverService.findServersAll()).thenReturn(newServerList()); ? 2. Mock ?
? ??
when(serverService.getServerById(1)).thenReturn(null);
Document doc = tester.renderPage("server/ServerPage"); ? 3. page rendering
Element delete = doc.getElementById("delete"); ? 4. link ?? ??
assertThat(delete, notNullValue()); ? 5. link ?? ??
Document linkDoc = tester.clickLink(delete); ? 5. link ??
assertThat(linkDoc.toString(),
containsString("Server not found. id = 1")); ? 5. link ??
??
}
Test ???? ???
? ??? ?? ??? ???? ??
? Cobertura ??
? ??? ???? ??? ??? ?? ??
? ??? ? ??? ? ? ?? ?? ??
¨C http://cms.nkia.net:8088/projects/cygnus/cygnu
? ??? ??? ?? - McCabe's
cyclomatic complexity)?
¨C http://blog.wisedog.net/110
Ad

Recommended

???????(???)
???????(???)
?? ?
?
Maven
Maven
?? ?
?
Maven
Maven
Suan Lee
?
??? ?? ??
??? ?? ??
?? ?
?
Jenkins? ??? javascript ??
Jenkins? ??? javascript ??
?? ?
?
?? ????? ???? ??
?? ????? ???? ??
Yoonsung Jung
?
Vert.x ??? ???_???
Vert.x ??? ???_???
?? ?
?
???? ??
???? ??
?? ?
?
Springmvc
Springmvc
HyungKuIm
?
[???????]Gradle Basic - How to use Gradle in Java Project
[???????]Gradle Basic - How to use Gradle in Java Project
Ji-Woong Choi
?
okspring3x
okspring3x
Kenu, GwangNam Heo
?
Spring boot 5??? cli
Spring boot 5??? cli
Choonghyun Yang
?
[???????]Spring 3.1 Core
[???????]Spring 3.1 Core
Ji-Woong Choi
?
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Kyunghun Jeon
?
Spring boot ????????(1-4?)
Spring boot ????????(1-4?)
Choonghyun Yang
?
20170310 tech day-1st-maven? ??? ???? ??-???
20170310 tech day-1st-maven? ??? ???? ??-???
ymtech
?
???? ????? ?? ? ??? ?? (Example)
???? ????? ?? ? ??? ?? (Example)
?? ?
?
bamboo ? PHP ???? ???? ??
bamboo ? PHP ???? ???? ??
KwangSeob Jeong
?
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
?? ?
?
????? ?????? ???? HTML5
????? ?????? ???? HTML5
Taegon Kim
?
iOS9 ??
iOS9 ??
Jae Sung Park
?
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
dpTablo
?
????? ?? ??(Sig) ?? ??
????? ?? ??(Sig) ?? ??
Hong Hyo Sang
?
???? ??? ????? ????????? (5?? : ??? ?????)
???? ??? ????? ????????? (5?? : ??? ?????)
DK Lee
?
Universal Rendering
Universal Rendering
Taegon Kim
?
????????-???????
????????-???????
?? ?
?
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
Jaesup Kwak
?
Okjsp 13?? ????: ?? ????? Test
Okjsp 13?? ????: ?? ????? Test
beom kyun choi
?
???.C++ api ???.20140315 a
???.C++ api ???.20140315 a
Choonghyun Yang
?

More Related Content

What's hot (20)

???? ??
???? ??
?? ?
?
Springmvc
Springmvc
HyungKuIm
?
[???????]Gradle Basic - How to use Gradle in Java Project
[???????]Gradle Basic - How to use Gradle in Java Project
Ji-Woong Choi
?
okspring3x
okspring3x
Kenu, GwangNam Heo
?
Spring boot 5??? cli
Spring boot 5??? cli
Choonghyun Yang
?
[???????]Spring 3.1 Core
[???????]Spring 3.1 Core
Ji-Woong Choi
?
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Kyunghun Jeon
?
Spring boot ????????(1-4?)
Spring boot ????????(1-4?)
Choonghyun Yang
?
20170310 tech day-1st-maven? ??? ???? ??-???
20170310 tech day-1st-maven? ??? ???? ??-???
ymtech
?
???? ????? ?? ? ??? ?? (Example)
???? ????? ?? ? ??? ?? (Example)
?? ?
?
bamboo ? PHP ???? ???? ??
bamboo ? PHP ???? ???? ??
KwangSeob Jeong
?
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
?? ?
?
????? ?????? ???? HTML5
????? ?????? ???? HTML5
Taegon Kim
?
iOS9 ??
iOS9 ??
Jae Sung Park
?
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
dpTablo
?
????? ?? ??(Sig) ?? ??
????? ?? ??(Sig) ?? ??
Hong Hyo Sang
?
???? ??? ????? ????????? (5?? : ??? ?????)
???? ??? ????? ????????? (5?? : ??? ?????)
DK Lee
?
Universal Rendering
Universal Rendering
Taegon Kim
?
????????-???????
????????-???????
?? ?
?
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
Jaesup Kwak
?
???? ??
???? ??
?? ?
?
[???????]Gradle Basic - How to use Gradle in Java Project
[???????]Gradle Basic - How to use Gradle in Java Project
Ji-Woong Choi
?
[???????]Spring 3.1 Core
[???????]Spring 3.1 Core
Ji-Woong Choi
?
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Backend Master | 3.1.4 Build - Java build tool - Maven/Gradle Build Lifecycle
Kyunghun Jeon
?
20170310 tech day-1st-maven? ??? ???? ??-???
20170310 tech day-1st-maven? ??? ???? ??-???
ymtech
?
???? ????? ?? ? ??? ?? (Example)
???? ????? ?? ? ??? ?? (Example)
?? ?
?
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
?? ?
?
????? ?????? ???? HTML5
????? ?????? ???? HTML5
Taegon Kim
?
Spring Boot + React + Gradle in VSCode
Spring Boot + React + Gradle in VSCode
dpTablo
?
???? ??? ????? ????????? (5?? : ??? ?????)
???? ??? ????? ????????? (5?? : ??? ?????)
DK Lee
?
Universal Rendering
Universal Rendering
Taegon Kim
?
????????-???????
????????-???????
?? ?
?
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
Jaesup Kwak
?

Similar to Cygnus unit test (20)

Okjsp 13?? ????: ?? ????? Test
Okjsp 13?? ????: ?? ????? Test
beom kyun choi
?
???.C++ api ???.20140315 a
???.C++ api ???.20140315 a
Choonghyun Yang
?
TDD.JUnit.???.??
TDD.JUnit.???.??
Wonchang Song
?
Tdd
Tdd
savemyface
?
katalon studio ?? ??? GUI ??? ??? ???
katalon studio ?? ??? GUI ??? ??? ???
SangIn Choung
?
Sonarqube 20160509
Sonarqube 20160509
?? ?
?
X unittestpattern 1?_???
X unittestpattern 1?_???
?? ?
?
»Ø¹úÈ¥ÄÄÂò±ÏÒµÖ¤°ìµÏ¿Ï´óѧ±ÏÒµÖ¤Deakin±ÏÒµÖ¤Ê顾Q΢202-661-4433¡¿ DeakinÊÛ°ÄÖÞ±ÏÒµÖ¤Ô­°æÐ±ÏÒµÖ¤Êé³öÊÛ¸÷¹ú±ÏÒµÖ¤Âò°ÄÖÞ±ÏÒµÖ¤µÄ¼Û...
»Ø¹úÈ¥ÄÄÂò±ÏÒµÖ¤°ìµÏ¿Ï´óѧ±ÏÒµÖ¤Deakin±ÏÒµÖ¤Ê顾Q΢202-661-4433¡¿ DeakinÊÛ°ÄÖÞ±ÏÒµÖ¤Ô­°æÐ±ÏÒµÖ¤Êé³öÊÛ¸÷¹ú±ÏÒµÖ¤Âò°ÄÖÞ±ÏÒµÖ¤µÄ¼Û...
asfasf4
?
[????] ?? ???? ???? ?? ??(??)
[????] ?? ???? ???? ?? ??(??)
SangIn Choung
?
Scala, Spring-Boot, JPA? ?????? ??? ??
Scala, Spring-Boot, JPA? ?????? ??? ??
Javajigi Jaesung
?
TDD - Test Driven Development
TDD - Test Driven Development
ChangHyeon Bae
?
01.???? ????
01.???? ????
Hankyo
?
?????
?????
?? ?
?
Android unit testing
Android unit testing
Hyeoungkyu Chang
?
??????????? ????? ??????????? ????? ???????? ??????
??????????? ????? ??????????? ????? ???????? ??????
?? ?
?
ParameterizedTest ?? ContextCaching.pptx
ParameterizedTest ?? ContextCaching.pptx
junu6
?
Spring test mvc ?????????
Spring test mvc ?????????
?? ?
?
???? ??? ????? ????????? (8?? : ???, ?????, ??)
???? ??? ????? ????????? (8?? : ???, ?????, ??)
DK Lee
?
Io t??? ??????????_????
Io t??? ??????????_????
SangIn Choung
?
Devon 2011-b-5 ???? ??? ?? ???
Devon 2011-b-5 ???? ??? ?? ???
Daum DNA
?
Okjsp 13?? ????: ?? ????? Test
Okjsp 13?? ????: ?? ????? Test
beom kyun choi
?
katalon studio ?? ??? GUI ??? ??? ???
katalon studio ?? ??? GUI ??? ??? ???
SangIn Choung
?
Sonarqube 20160509
Sonarqube 20160509
?? ?
?
X unittestpattern 1?_???
X unittestpattern 1?_???
?? ?
?
»Ø¹úÈ¥ÄÄÂò±ÏÒµÖ¤°ìµÏ¿Ï´óѧ±ÏÒµÖ¤Deakin±ÏÒµÖ¤Ê顾Q΢202-661-4433¡¿ DeakinÊÛ°ÄÖÞ±ÏÒµÖ¤Ô­°æÐ±ÏÒµÖ¤Êé³öÊÛ¸÷¹ú±ÏÒµÖ¤Âò°ÄÖÞ±ÏÒµÖ¤µÄ¼Û...
»Ø¹úÈ¥ÄÄÂò±ÏÒµÖ¤°ìµÏ¿Ï´óѧ±ÏÒµÖ¤Deakin±ÏÒµÖ¤Ê顾Q΢202-661-4433¡¿ DeakinÊÛ°ÄÖÞ±ÏÒµÖ¤Ô­°æÐ±ÏÒµÖ¤Êé³öÊÛ¸÷¹ú±ÏÒµÖ¤Âò°ÄÖÞ±ÏÒµÖ¤µÄ¼Û...
asfasf4
?
[????] ?? ???? ???? ?? ??(??)
[????] ?? ???? ???? ?? ??(??)
SangIn Choung
?
Scala, Spring-Boot, JPA? ?????? ??? ??
Scala, Spring-Boot, JPA? ?????? ??? ??
Javajigi Jaesung
?
TDD - Test Driven Development
TDD - Test Driven Development
ChangHyeon Bae
?
01.???? ????
01.???? ????
Hankyo
?
?????
?????
?? ?
?
??????????? ????? ??????????? ????? ???????? ??????
??????????? ????? ??????????? ????? ???????? ??????
?? ?
?
ParameterizedTest ?? ContextCaching.pptx
ParameterizedTest ?? ContextCaching.pptx
junu6
?
Spring test mvc ?????????
Spring test mvc ?????????
?? ?
?
???? ??? ????? ????????? (8?? : ???, ?????, ??)
???? ??? ????? ????????? (8?? : ???, ?????, ??)
DK Lee
?
Io t??? ??????????_????
Io t??? ??????????_????
SangIn Choung
?
Devon 2011-b-5 ???? ??? ?? ???
Devon 2011-b-5 ???? ??? ?? ???
Daum DNA
?
Ad

Cygnus unit test

  • 2. Agenda ? Test? ? TDD ? Database Test ? Service Tier Test ? Web Tier Test ? Test Coverage
  • 3. ?? ??? ???? / ?? ??? ?? ??? ?? ??? ??? ?? ?? ???
  • 4. ??? ?? ? ?? ??? - ??? ?? , ??? ??? ??? ?? ( ?? ?? ?? , ?? ?? ) ? ??? ? ?? ??? ¨C ?? ? , ??? ? , ?? ??? ? ?? ?? ??? ? ?? ??? ¨C ??? api ? ?? ?? ?? ?? ? , ????? ?? ??? ? ???? ??? ¨C jMeter ?? ?? ?? ?? ? ?? ??? ¨C ???? ?? ?? ?? QA ?? ? ?
  • 5. Mockito Tapestry Test Test ?? Tools Spring Test
  • 6. ?? ??? ¡° ?? ??? (unit test) ? ?? ??? ??? ?? ??? ????? ??? ? ??? . ? , ?? ???? ??? ? ?? ??? ???? ???? ?? ? ??? .¡± wikipedia.org
  • 7. Why Unit Test ? ???? ?? ??? ???? ?? ? ? ? ??? ?? ??? ???? ? ?? ???? ? ????? ???? ?? ? ??? ??? ?? class ? ??? ? ??? ??? ? ?? ? ?? ???? ?? ???? ??? ? ? ???? ??? ? ???
  • 9. Why not Unit Test ? ? ?? ?? ?? ?? ? ??? ?? ??? ? ??? ???? ?? ??? ?? ? ??? ?? ??? ?? ??
  • 10. ?? ??? ?? ? Isolated ¨C ??? ??? ? ? ????? ??? ?? ? Repeatable ¨C ?? ????? ??? ?? ¨C ??? ?? ?? ?? ? Fast ¨C ??? ??? . ¨C ?? ??? ??? ??? ?? ? ??? ?? ? Self-Documenting ¨C ??? ??? ???? ???? ??? ?? ¨C ??? ??? ???? ??? ?? ??? ??
  • 11. First Unit Test Public class Calculator { public double add(double number1, double number2) { return number1 + number2; } } import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { ? 1.public class @Test ? 2.unit test public void test() { Calculator calc = new Calculator(); double result = calc.add(10, 20); ? 3. ?????? assertEquals(30, result, 0); ? 4. ?? ?? } }
  • 13. Test Driven Development(TDD) ¡° ?? ??? ????? ?? . ? ?? ? ????? .¡±
  • 19. Database Test ??? ? Isolated ¨C DB ? ??? ?? ? Repeatable ¨C Test ? ??? DB ? ???? ? Fast ¨C DB ??? ????? ??? ¨C DB ?? ??? ???? ??? ? ?? ??? ?? ? ?? ?? ??
  • 20. Database Test ?? ? Embedded DB(H2, HSQL) ?? ¨C Fast ¨C ??? ?? ??? ?? ?? ? DbUnit ?? ¨C ??? ?? ?? ?? ¨C ?? ?? ??? ?? ¨C ?? ?? ?? ??
  • 21. Database Test ?? ? ???? ???? ?? ?? ¨C DB ??? ?? ? )user, index, unique, max ¨C ?? DB ?? ? ?? ? ??? ???? ¨C one-to-many ??? ??? forign ? ?? ? ??? ? ¨C Cascade ? ? ????? ? ? ?? ?? ¨C ?? ?? ??? ???? ?? ??? ?? ?? ??? ?
  • 22. Database Test Code @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("/META-INF/spring/test-applicationContext.xml") @Transactional @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class , TransactionDbUnitTestExecutionListener.class, DbUnitTestExecutionListener.class }) public class ServerDaoTest { @Test @DatabaseSetup("testServer.xml") ?1. ?? ??? @ExpectedDatabase(value="empty.xml", ?2. ?? ??? ?? assertionMode=DatabaseAssertionMode.NON_STRICT) public void testDeleteServer() { Server server = serverDao.getById(1); serverDao.delete(server); ?3. ??? ?? serverDao.flush(); ?4. ORM ?? ??? assertThat(serverDao.findAll().size(), is(0)); ?5. delete ?? }
  • 23. Service ?? Test ??? ? Isolated ¨C ?? ??? / ?? (DAO) ? ???? ?? ¨C ?? ??? (Agent, Mail Server, REST) ? ???? ?? ? Repeatable ¨C Test ? ??? ?? ??? ???? ?? ? ? Fast ¨C ??? ?? ??? ?? ??? ????
  • 24. Service ?? Test ?? ? Stub ?? ?? ¨C Stub ?? ?? ??? ???? ???? ?? (Agent ????? ) ¨C ?? ??? stub ??? ???? ¨C Stub ??? ???? ?? ?? ? Mock ?? ?? ¨C Mock ?? ?? ??? ??? ??? ?? ? ???
  • 25. Service ?? Test ?? ? Mock ?? ?? ¨C Mock ?? ?? ??? ???? ?? ¨C ?? ??? ???? ???? . ¨C Mock Framework ??? ??? ?? ? Mockito, EasyMock, Jmock
  • 26. Service ?? Test ?? @Service public class ServerServiceImpl implements ServerService { @Autowired ServerDao serverDao; @Transactional public Server discoveryServer(String ipAddress) { Server server = serverDao.findServerByIpAddress(ipAddress); if(server != null) { throw new ServerDuplicatedException("Duplicated ipAddres=" + ipAddress); } Server newServer = new Server(); newServer.setIpAddress(ipAddress); serverDao.save(newServer); return newServer; }
  • 27. Service ?? Test ?? @RunWith(MockitoJUnitRunner.class) ? 1. mockito ?? ?? public class ServerServiceTest { @InjectMocks ? 2. mock ?? ServerService serverService = new ServerServiceImpl(); @Mock ? 3. mock ?? ?? ServerDao serverDao; @Test public void testDiscoveryServer() { String ipAddress = "127.0.0.1"; //stub ?4. mock ?? ?? when(serverDao.findServerByIpAddress(ipAddress)).thenReturn(null); //run Server server=serverService.discoveryServer(ipAddress); ? 5. ?? ??? ?? //assert assertThat(server.getIpAddress(), equalTo(ipAddress)); ? 6. ??? ?? ?? ? ? verify(serverDao).findServerByIpAddress(ipAddress); ? 7. mock ?? ?? ?? verify(serverDao).save(server); ? 8. mock ?? ?? ?? }
  • 28. Service ?? Test ?? @Test(expected=ServerDuplicatedException.class) ? 1. ?? ?? ? ?? public void testDiscoveryServerDuplicated() { String ipAddress = "127.0.0.1"; Server existServer = new Server(); when(serverDao.findServerByIpAddress(ipAddress)).thenReturn(existServer); ? 2. mock ?? Server server = serverService.discoveryServer(ipAddress); ? 3. ??? ? ?? ?? }
  • 29. Web ?? test ??? ? ??? ??? ?? ??? ?? ? ?? ¨C template ?? , javascript ? ? ??? / ????? ??? ? ???? ? ??? ??? ? ???? validate ?? ??? ??? ? ?? ?? ??? ? Isolate ¨C ??? ??? ???? ?? ?? ???? ??? ? Fast ¨C ? ?????? ?? ? ?? ??? ??
  • 30. Web ?? ??? ?? ? ??? ??? mock ??? ?? ? Tapestry Test framework ?? ¨C PageTester.renderPage() ¨C PageTester.clickLink() ? Selenium ??? ??
  • 31. Web ?? ??? ?? public class ViewServerTest { PageTester tester; @Before ? 1. test setUp public void setUp() { String appPackage = "com.nkia.cygnus.management.server"; String appName = "development"; tester = new PageTester(appPackage, appName, "src/main/webapp", TestAppModule.class); } @Test public void testExistServer() { ServerService serverService = tester.getService(ServerService.class); ? 2. MockServerServic when(serverService.getServerById(1)).thenReturn(newServer()); ? 3. Mock ? ? ?? Document doc = tester.renderPage("server/ViewServer/1"); ? 4. ?? ??? ??? assertThat(doc.toString(), containsString("View Server - testserver123456")); ? 4. ?? ?? ??
  • 32. Web ?? ??? ?? // link test @Test public void testDeleteNotExistServer() { ServerService serverService = tester.getService(ServerService.class); ? 1. Mock ?? when(serverService.findServersAll()).thenReturn(newServerList()); ? 2. Mock ? ? ?? when(serverService.getServerById(1)).thenReturn(null); Document doc = tester.renderPage("server/ServerPage"); ? 3. page rendering Element delete = doc.getElementById("delete"); ? 4. link ?? ?? assertThat(delete, notNullValue()); ? 5. link ?? ?? Document linkDoc = tester.clickLink(delete); ? 5. link ?? assertThat(linkDoc.toString(), containsString("Server not found. id = 1")); ? 5. link ?? ?? }
  • 33. Test ???? ??? ? ??? ?? ??? ???? ?? ? Cobertura ?? ? ??? ???? ??? ??? ?? ?? ? ??? ? ??? ? ? ?? ?? ?? ¨C http://cms.nkia.net:8088/projects/cygnus/cygnu ? ??? ??? ?? - McCabe's cyclomatic complexity)? ¨C http://blog.wisedog.net/110