2. 함수�
FitNesses(오픈소스 테스트 도구)�
public static String testableHtml(
PageData pageData,
boolean includeSuiteSetup
) throws Exception {
WikiPage wikiPage=pageData.getWikiPage();
StringBuffer buffer = new StringBuffer();
if (pageData.hasAttribute("Test")) {
if (includeSuiteSetup) {
WikiPage suiteSetup =
PageCrawlerImpl.getInheritedPage(
SuiteResponder.SUITE_SETUP_NAME, wikiPage
);
if (suiteSetup != null) {
WikiPagePath pagePath =
suiteSetup.getPageCrawler().getFullPath(suiteSetup);
String pagePathName=PathParser.render(pagePath); buffer.append("! include -setup .")
.append(pagePathName)
.append("\n");
}
}
WikiPage setup =
PageCrawlerImpl.getInheritedPage("SetUp", wikiPage);
if (setup != null) {
WikipagePath setupPath=
wikipage.getPageCrawler().getFullPath(setup);
String setupPathlame=PathParser.render(setupPath); buffer.append("!include -setup .")
.append(setupPathName)
.append("\n");
}
}
buffer.append(pageData.getContent());
if (pageData.hasAttribute("Test")) {
WikiPage teardown =
PageCrawlerImpl.getInheritedPage("TearDown", wikiPage);
if (teardown != null) {
}
WikiPagePath tearDownPath =
wikiPage.getPageCrawler().getFullPath(teardown);
String tearDown PathName = PathParser.render(tearDownPath); buffer.append("\n")
.append("! include -teardown .")
.append(tearDownPathName)
.append("\n");
if (includeSuiteSetup) {
WikiPage suiteTeardown =
PageCrawlerImpl.getInheritedPage(
SuiteResponder.SUITE_TEARDOWN_NAME,
wikiPage
);
if (suiteTeardown != null) {
WikiPagePath pagePath =
suiteTeardown.getPageCrawler().getFullPath (suiteTeardown);
String pagePathName = PathParser.render(pagePath);
buffer.append("! include -teardown.")
.append(pagePathName)
.append("\n");
}
}
}
pageData.setContent (buffer.toString());
return pageData.getHtml();
}
리팩터링
public static String renderPageWithSetupsAndTeardowns (
PageData pageData, boolean isSuite
) throws Exception {
boolean isTestPage = pageData.hasAttribute("Test");
if (isTestPage) {
WikiPage testPage = pageData.getWikiPage();
StringBuffer newPageContent = new StringBuffer();
includeSetupPages(testPage, newPageContent, isSuite);
newPageContent.append(pageData.getContent());
includeTeardownPages(testPage, newPageContent, isSuite);
pageData.setContent(newPageContent.toString());
}
return pageData.getHtml();
}
작게 만들어라!
블록과 들여쓰기
한 가지만 해라!
함수 당 추상화 수준은 하나로!
Switch 문
Payroll.java
public Money calculatePay (Employee e)
throws InvalidEmployeeType {
switch(e.type){
case COMMISSIONED:
return calculateCommissioned Pay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalaried Pay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
Switch 문
서술적인 이름을 사용하라!
함수 인수
함수 인수
함수 인수
명령과 조회를 분리하라!
오류 코드보다 예외를 사용하라!
반복하지 마라!
구조적 프로그래밍
함수를 어떻게 짜죠?
결론