More Related Content What's hot (20)
Universal Rendering Universal Rendering
Taegon Kim ?
?????? ????? ???? ??? ???? ???? ???? ?? ???????. ???? ???? ?? ? ??? ??? ?? ??? ? ???? ?? ??, ?? ??? ?????.
Similar to Cygnus unit test (20)
Scala, Spring-Boot, JPA? ?????? ??? ?? Scala, Spring-Boot, JPA? ?????? ??? ??
Javajigi Jaesung ?
Scala, Spring-Boot, JPA? ??? ? ?????? ?? ??? ?? ???. Spring-Boot? JPA ?????? ??? ?? ? ?????? ??? ????. ? ?????? ??? ??? ??? ??? Scala?? ??? ??? ? ??? ??? ?????? ?? ? ?? ???? ????. Spring-Boot + JPA ??? Scala? ?????? ???? ???? ???.
TDD - Test Driven Development TDD - Test Driven Development
ChangHyeon Bae ?
TDD ??? ?? ????, ??? ?? ??? ???.
- TDD? ?? ???? ??? ????? ?????. ?? ??? ??? ???? ???? ?? ???? ??? ???? ??? ???? ?????? ????.
- TDD? ??? ???? ??? ?? ¡°Clean code that works¡±
- TDD? ?? ??? ???? ????.
?? : ???? ?? ??? ???? ????. ???? ????? ?? ? ??.
?? : ???? ???? ??? ????.
???? : ???? ???? ?? ?? ??? ?? ??? ????, ???? ?? ??? ??.
??? ??? ?? TDD? ¡°?? ?? ?? ?? ??? ??? ?? ??? ?¡±?? ????? ??
Cygnus unit test4. ??? ??
? ?? ??? - ??? ?? , ??? ??? ???
?? ( ?? ?? ?? , ?? ?? ) ? ???
? ?? ??? ¨C ?? ? , ??? ? , ?? ???
? ?? ?? ???
? ?? ??? ¨C ??? api ? ?? ?? ?? ??
? , ????? ?? ???
? ???? ??? ¨C jMeter ?? ?? ?? ??
? ?? ??? ¨C ???? ?? ?? ?? QA ?? ?
?
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. ?? ??
}
}
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 ?? ?? ??? ???? ?? ??? ??
?? ??? ?
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