Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
既存のAndroidアプリをリファクタリングしていく話
Search
hisaichi5518
July 02, 2016
Technology
7.2k
23
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
既存のAndroidアプリをリファクタリングしていく話
hisaichi5518
July 02, 2016
More Decks by hisaichi5518
See All by hisaichi5518
技術力あげたい
hisaichi5518
4
5k
Dartにおける静的解析 / FlutterKaigi 2022
hisaichi5518
0
2.3k
ソフトウェアエンジニアが品質保証を学んでわかったこと / What software engineers have learned about quality assurance
hisaichi5518
6
12k
10X と Flutter / 10X with Flutter
hisaichi5518
0
2.4k
ひさいちとの1on1
hisaichi5518
0
2.7k
しあわせ推進委員会 / Shiawase Promotion Committee
hisaichi5518
0
1.3k
2017-03-23
hisaichi5518
0
3.8k
Pepabo Tech Conference 7
hisaichi5518
1
1.2k
かんばんやりたい
hisaichi5518
0
1.2k
Other Decks in Technology
See All in Technology
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
1
520
Codex を使った障害対応机上演習の実際
orgachem
PRO
0
360
AI時代の開発はウォーターフォールに回帰する? / development-with-ai-back-to-wf
okamototakuyasr2
0
120
DevelopersIO2026 -バックアップは“消されないこと”が9割-
yoshida0129
0
410
How we choose session proposals
kawaguti
PRO
0
170
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
190
「作れる」と「リリースできる」の間にあったもの── PdMを外して見えた、PdMがやるべき仕事/Buildable ≠ Shippable: What Removing the PM Taught Me About the PM’s Job
yappli_developers
0
280
正解のない研修に放り出されて / Being thrown into a training program with no right answers
ohnoeight
1
150
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
170
2026-10-24 JAWS JAWS-UG 茨城 #18 IAM Policy Autopilotってなにさ。terraform planからIAM Policyつくれるの? / What's IAM Policy Autopilot
masasuzu
0
170
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
780
Adversary Infrastructure Hunting101
disconinja
0
160
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
470
Facilitating Awesome Meetings
lara
57
7.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Tell your own story through comics
letsgokoyo
1
1.1k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
A Tale of Four Properties
chriscoyier
163
24k
エンジニアに許された特別な時間の終わり
watany
109
250k
We Are The Robots
honzajavorek
0
410
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
560
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
580
Transcript
!IJTBJDIJ(.01&1"#0JOD طଘͷ"OESPJEΞϓϦΛ ϦϑΝΫλϦϯά͍ͯ͘͠
γχΞΤϯδχΞ !IJTBJDIJ ٢ߴ༝ཬࢠ٢ߴ༝ཬࢠ٢ߴ༝ཬࢠ XXXZPTIJUBLBZVSJLPDPN
NJOOF ϛϯω
ࠓɺ"OESPJEΞϓϦΛ୲த
طଘͷ"OESPJEΞϓϦΛ ϦϑΝΫλϦϯά͢Δ
ͳʹΛ͔͢ w͍͔ͭ͘ى͖ͨʹ͍ͭͯɾͲ͏ͬͯղܾ͔ͨ͠
͞ͳ͍͜ͱ w3Y+BWBͱ͔%BUB#JOEJOHͱ͔φ͍ϥΠϒϥϦͷ wઈඒ͍͠ઃܭͷ
None
ळʙ w"OESPJEΞϓϦͷ։ൃελʔτ wॳ"OESPJEνʔϜਓ wJ04ΞϓϦʹൺͯػೳͷ͕ࠩ͋ͬͨͷͰɺͱʹ͔͘ ։ൃεϐʔυ༏ઌ wIUUQTQFQBCPDPNSFDSVJUJOUFSWJFX @
Նʙ w"OESPJEΞϓϦνʔϜ͕ਓʹͳͬͨ wࣗ͜ͷࠒʹ"OESPJEνʔϜʹೖͬͨ
͜Ε͔Βόʔϯͱ͍ͧ͘ʙʂ
ൃੜ
ςετ͕ͳ͍
ͳͥςετ͕ඞཁͳͷ͔ wΑΓ৴པग़དྷΔΞϓϦʹ͠ͳ͚ΕͳΒͳ͍͔Β
৴པग़དྷΔΞϓϦͬͯͳʹ wΞϓϦʹόά͕গͳ͍ wΞϓϦ͕ಥવམͪͳ͍ wαʔϏεӡӦݩ͕৴༻ग़དྷΔ wͳͲͳͲ༷ʑͳཁҼ͕͋Δ
৴པग़དྷΔΞϓϦͬͯͳʹ wΞϓϦʹόά͕গͳ͍ wΞϓϦ͕ಥવམͪͳ͍ wαʔϏεӡӦݩ͕৴༻ग़དྷΔ wͳͲͳͲ༷ʑͳཁҼ͕͋Δ ຬ͍ͨͨ͠
৴པग़དྷΔΞϓϦʹͳΔͨΊ ςετඞཁ
ςετͳ͍Λ ղܾ͢ΔͨΊʹͬͨ͜ͱ
ղܾ͢ΔͨΊʹ w6*ςετΛॻ͘ wςετͷͷಋೖ w%FWJDF'BSNΛ͏
6*ςετΛॻ͜͏ wϙνϙνςετΛগࣗ͠ಈԽ͍ͨ͠ w&TQSFTTPΛར༻͍ͯ͠·͢
1 @RunWith(AndroidJUnit4.class) 2 @LargeTest 3 public class HelloWorldEspressoTest { 4
5 @Rule 6 public ActivityTestRule<MainActivity> mActivityRule 7 = new ActivityTestRule(MainActivity.class); 8 9 @Test 10 public void listGoesOverTheFold() { 11 onView(withText("Hello world!")).check(matches(isDisplayed())); 12 } 13 }
1 @RunWith(AndroidJUnit4.class) 2 @LargeTest 3 public class HelloWorldEspressoTest { 4
5 @Rule 6 public ActivityTestRule<MainActivity> mActivityRule 7 = new ActivityTestRule(MainActivity.class); 8 9 @Test 10 public void listGoesOverTheFold() { 11 onView(withText("Hello world!")).check(matches(isDisplayed())); 12 } 13 }
ςετͷͷಋೖ wςετΛॻ͘͜ͱʹ׳Εͯͳ͍ਓ͕ଟ͔ͬͨ wςετΛॻ͘͜ͱʹ׳ΕΔͨΊʹɺςετ͚ͩΛॻ ͘Λिؒʹઃ͚Δ͜ͱʹͨ͠
%FWJDF'BSNͷར༻ w6*ςετΛॻ͍ͯܧଓతʹ࣮ߦ͍ͯ͠ͳ͍ͱҙຯ͕ ͳ͍ w"NB[PO͕ࣾఏڙ͢Δʮ࣮ࡍͷσόΠεΛར༻ͯ͠ς ετΛ࣮ߦͯ͘͠ΕΔʯαʔϏε wϒϥϯνຖʹ࣮ߦ͢ΔΑ͏ʹͯ͠ɺςετ͕௨Βͳ͍ ͱϚʔδ͠ͳ͍ϧʔϧΛܾΊͨ
ਐΊํ
ػೳ։ൃͦͷ··ਐΊΔ wػೳ։ൃͦͷ··ਐΊͳ͕Βɺ৽͘͠։ൃ͢Δͱ͜ ΖͷςετΛͳΔ͘ॻ͍͍ͯ͘ํ wνʔϜϝϯόʔ͕૿͑ͨͷػೳ։ൃΛΑΓεϜʔζ ʹߦ͏ͨΊͳͷͰɺςετΛॻ͘ͱ͍͏͜ͱػೳ։ ൃΛࢭΊͯ·ͰΔ͜ͱͰͳ͔ͬͨ
δϫδϫͱ6*ςετ͕ ૿͖͑ͯͨ
ൃੜ
6*ςετͭΒ͍
6*ςετͷͳʹ͕ͭΒ͍ wλΠϛϯά࣍ୈͰ࣌ʑίέΔςετ͕૿͑ͨ wେ͖ΊͷมߋΛߦ͏ͱ6*ςετͷ࡞Γ͠ʹͳͬͯԿ 6*ςετΛॻ͖ͯ͠Δ w6*ςετͷ࣮ߦ͕࣌ؒͯ͘ɺ͕ͭ࣌ؒ૿͑ͨ wͦͦ6*ςετΛॻͨ͘Ίʹ֮͑Δࣄ͕ଟͯ͘େม
ςετΛͭΒ͍ͷආ͚͍ͨͷʹ ͨ͘͠ͳ͍ͷͰղܾ͍ͨ͠
6*ςετΑΓ୯ମςετͷ ΄͏͕ྑ͍ؾ͕͢Δ
6*ςετWT୯ମςετ w6*ςετɺςετͷ୯Ґ͕େ͖͍ w୯ମςετɺϝιου୯ҐͰਖ਼͘͠ಈ࡞͢Δͷ͔ݕ ূ͢ΔͷͰςετͷ୯Ґ͕খ͍͞ w୯ମςετɺ֮͑Δ͜ͱগͳ͍
ͬͺ୯ମςετͷ΄͏͕ ྑ͍ؾ͕͢Δ
ͳͥͨͪ6*ςετΛॻ ͍͍ͯΔΜͩ
"OESPJE5FTUͰͳ͍ͱಈ͔ͳ͍ Ϋϥεͷதʹςετ͍ͨ͠ͷ͕ ͋Δ
ͳͥ୯ମςετͷதͰಈ͔ͳ͍Ϋϥε ͷதʹςετ͍ͨ͠ͷ͕͋Δ
̍ͭͷΫϥεͷ͕େ͖͗͢ɻ ΫϥεͷΛখ͘͞ग़དྷ͍ͯͳ ͍
ͭͷΫϥεʹ٧ΊࠐΈա͗
ͳͥͭͷΫϥεʹ٧ΊࠐΈա͗Δͱͳͷ͔ w୯ମςετ͕ॻ͖ʹ͍͘ wαʔϏεΛΑΓͤ͞ΔʹɺมԽʹڧ͘ͳ͚Ε ͳΒͳ͍
มԽʹڧ͍ wมԽʹڧ͍ͱɺʮίʔυͷཧղ͕͍͢͠ʯʮมߋ ΛՃ͍͑͢ʯʮՃ͑ͨมߋͷӨڹΛཧղ͍͢͠ʯ Λࢦ͢
ͭͷΫϥεʹ٧ΊࠐΈա͗Δͱʜ wʮίʔυͷཧղ͕͠ʹ͍͘ʯʮมߋΛՃ͑ʹ͍͘ʯʮՃ ͑ͨมߋͷӨڹΛཧղ͠ʹ͍͘ʯ w୯ମςετͰςετ͠ʹ͍͘
ͳͷͰ ͭͷΫϥεʹ٧ΊࠐΈ͗͢
ͭͷΫϥεʹ٧ΊࠐΈա͗Λ ղܾ͢ΔͨΊʹͬͨ͜ͱ
ͳͥΛখ͘͞ग़དྷ͍ͯ ͳ͍ͷ͔
Ϋϥε͕ԿΛ୲͖͢ͳͷ͔໌֬ ʹܾ·͍ͬͯͳ͍͔Β
ͭ·Γɺܾ·ΓࣄΛܾΊͯ͋͛ΕΑ͍
ܾ·ΓࣄΞʔΩςΫνϟ
.71ΞʔΩςΫνϟΛ࠾༻͢Δ
ϩδοΫ wϓϨθϯςʔγϣϯϩδοΫ wϏδωεϩδοΫ
ϓϨθϯςʔγϣϯϩδοΫ ඞཁͳΛϏδωεϩδοΫʹ ͢·ͰͷৼΔ͍
ϏδωεϩδοΫ "1*σʔλϕʔεͳͲ͔Β Λಘͯɺฦ͢
ϓϨθϯςʔγϣϯϩδοΫ ϏδωεϩδοΫ͔Β ฦ͖ͬͯͨΛܗͯ͠ දࣔ͢ΔৼΔ͍
None
.71ΞʔΩςΫνϟ
.7$ͷੜ
.7$
.PEFM7JFX$POUSPMMFS
.7$"OESJPEΞϓϦʹ͍͍ͯͳ͍
7JFXͷૢ࡞ "DUJWJUZͰߦ͏
$POUSPMMFS "DUJWJUZʹॻ͘
7JFX $POUSPMMFS"DUJWJUZ
ΫϥεͷΛখ͘͞ग़དྷ͍ͯͳ͍
.7$"OESJPEΞϓϦʹ͍͍ͯͳ͍
.71
.PEFM7JFX1SFTFOUFS
.PEFM wϏδωεϩδοΫΛॻ͘ w1SFTFOUFSʹґଘ͠ͳ͍ w7JFXʹґଘ͠ͳ͍
7JFX wϢʔβʔ͔ΒͷೖྗΛड͚औΔ wϢʔβʔ͔ΒͷೖྗΛ1SFTFOUFSʹ͢ wը໘ͷදࣔߋ৽Λߦ͏
1SFTFOUFS wϓϨθϯςʔγϣϯϩδοΫΛॻ͘ w7JFXͷߋ৽ɺJOUFSGBDFΛܦ༝ͯ͠ߦ͏
.7$WT.71
.7$
1 public class UserActivity extends AppCompatActivity { 2 @Override 3
protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 fetchUser(userId); 6 } 7 8 private void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 showName(name); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 showError(error); 19 } 20 }); 21 } 22 23 public void showName(String name) { 24 mTextView.setText(name); 25 } 26 27 public void showError(...) { ... } 28 }
1 public class UserActivity extends AppCompatActivity { 2 @Override 3
protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 fetchUser(userId); 6 } 7 8 private void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 showName(name); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 showError(error); 19 } 20 }); 21 } 22 23 public void showName(String name) { 24 mTextView.setText(name); 25 } 26 27 public void showError(...) { ... } 28 } ೖྗΛड͚औΔ ϓϨθϯςʔγϣϯϩδοΫ 7JFXͷߋ৽
1 public class UserActivity extends AppCompatActivity { 2 @Override 3
protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 fetchUser(userId); 6 } 7 8 private void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 showName(name); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 showError(error); 19 } 20 }); 21 } 22 23 public void showName(String name) { 24 mTextView.setText(name); 25 } 26 27 public void showError(...) { ... } 28 } ೖྗΛड͚औΔ
1 public class UserActivity extends AppCompatActivity { 2 @Override 3
protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 fetchUser(userId); 6 } 7 8 private void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 showName(name); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 showError(error); 19 } 20 }); 21 } 22 23 public void showName(String name) { 24 mTextView.setText(name); 25 } 26 27 public void showError(...) { ... } 28 } ϓϨθϯςʔγϣϯϩδοΫ
1 public class UserActivity extends AppCompatActivity { 2 @Override 3
protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 fetchUser(userId); 6 } 7 8 private void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 showName(name); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 showError(error); 19 } 20 }); 21 } 22 23 public void showName(String name) { 24 mTextView.setText(name); 25 } 26 27 public void showError(...) { ... } 28 } 7JFXͷߋ৽
1 public class UserActivity extends AppCompatActivity { 2 @Override 3
protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 fetchUser(userId); 6 } 7 8 private void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 showName(name); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 showError(error); 19 } 20 }); 21 } 22 23 public void showName(String name) { 24 mTextView.setText(name); 25 } 26 27 public void showError(...) { ... } 28 } ೖྗΛड͚औΔ ϓϨθϯςʔγϣϯϩδοΫ 7JFXͷߋ৽
.71
1 public class UserActivity extends AppCompatActivity implements UserView { 2
@Override 3 protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 UserPresenter presenter = new UserPresenter(this); 6 presenter.fetchUser(userId); 7 } 8 9 @Override 10 public void showName(String name) { 11 mTextView.setText(name); 12 } 13 14 @Override 15 public void showError(...) { ... } 16 } 6TFS"DUJWJUZ
1 public class UserActivity extends AppCompatActivity implements UserView { 2
@Override 3 protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 UserPresenter presenter = new UserPresenter(this); 6 presenter.fetchUser(userId); 7 } 8 9 @Override 10 public void showName(String name) { 11 mTextView.setText(name); 12 } 13 14 @Override 15 public void showError(...) { ... } 16 } 1 public interface UserView { 2 void showName(String name); 3 void showError(...); 4 } 7JFXͷߋ৽ϝιου͕ఆٛ 6TFS7JFX
1 public class UserPresenter { 2 UserView mView; 3 4
public UserPresenter(UserView view) { 5 mView = view; 6 } 7 8 public void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 mView.showName(user.getName()); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 mView.showError(error); 19 } 20 }); 21 } 22 } 6TFS1SFTFOUFS
1 public class UserActivity extends AppCompatActivity implements UserView { 2
@Override 3 protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 UserPresenter presenter = new UserPresenter(this); 6 presenter.fetchUser(userId); 7 } 8 9 @Override 10 public void showName(String name) { 11 mTextView.setText(name); 12 } 13 14 @Override 15 public void showError(...) { ... } 16 } ೖྗΛड͚औΔ 7JFXͷߋ৽ 6TFS"DUJWJUZ
1 public class UserActivity extends AppCompatActivity implements UserView { 2
@Override 3 protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 UserPresenter presenter = new UserPresenter(this); 6 presenter.fetchUser(userId); 7 } 8 9 @Override 10 public void showName(String name) { 11 mTextView.setText(name); 12 } 13 14 @Override 15 public void showError(...) { ... } 16 } ೖྗΛड͚औΔ 6TFS"DUJWJUZ
1 public class UserPresenter { 2 UserView mView; 3 4
public UserPresenter(UserView view) { 5 mView = view; 6 } 7 8 public void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 mView.showName(user.getName()); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 mView.showError(error); 19 } 20 }); 21 } 22 } 6TFS1SFTFOUFS ϓϨθϯςʔγϣϯϩδοΫ
1 public class UserPresenter { 2 UserView mView; 3 4
public UserPresenter(UserView view) { 5 mView = view; 6 } 7 8 public void fetchUser(int userId) { 9 UserService service = ApiClient.getInstance().create(UsersService.class); 10 service.fetch(userId, new Callback<User>() { 11 @Override 12 public void success(User user, Response response) { 13 mView.showName(user.getName()); 14 } 15 16 @Override 17 public void failure(RetrofitError error) { 18 mView.showError(error); 19 } 20 }); 21 } 22 } 6TFS1SFTFOUFS 6TFS7JFXJOUFSGBDFΛܦ༝ͯ͠7JFXͷߋ৽
1 public class UserActivity extends AppCompatActivity implements UserView { 2
@Override 3 protected void onCreate(Bundle savedInstanceState) { 4 int userId = ...; 5 UserPresenter presenter = new UserPresenter(this); 6 presenter.fetchUser(userId); 7 } 8 9 @Override 10 public void showName(String name) { 11 mTextView.setText(name); 12 } 13 14 @Override 15 public void showError(...) { ... } 16 } 7JFXͷߋ৽ 6TFS"DUJWJUZ
.717JFX͔Β ϓϨθϯςʔγϣϯϩδοΫΛग़དྷΔ
͜ΕͰϓϨθϯςʔγϣϯϩδοΫͷςε τ͕୯ମςετͰॻ͚Δͧʙ
Ͳ͏͍͏ςετʹͳΔͷ͔
1 public class UserPresenterTest { 2 @Test 3 public void
testFetchUser() throws Exception { 4 final AtomicBoolean called = new AtomicBoolean(); 5 mMockClient.mock("/v4/users/1.json").to(200, "user.json"); 6 7 class MockedView implements UserView { 8 @Override 9 public void showName(String name) { 10 called.set(true); 11 assertThat(name).isEqualTo("hisaichi5518"); 12 } 13 } 14 15 UserPresenter presenter = new UserPresenter(new MockedView()); 16 presenter.fetchUser(1); 17 assertThat(called.get()).isEqualTo(true); 18 } 19 } 7JFXͷߋ৽ JOUFSGBDFΛܦ༝ͯ͠ߦ͏
1 public class UserPresenterTest { 2 @Test 3 public void
testFetchUser() throws Exception { 4 final AtomicBoolean called = new AtomicBoolean(); 5 mMockClient.mock("/v4/users/1.json").to(200, "user.json"); 6 7 class MockedView implements UserView { 8 @Override 9 public void showName(String name) { 10 called.set(true); 11 assertThat(name).isEqualTo("hisaichi5518"); 12 } 13 } 14 15 UserPresenter presenter = new UserPresenter(new MockedView()); 16 presenter.fetchUser(1); 17 assertThat(called.get()).isEqualTo(true); 18 } 19 } JOUFSGBDFΛܧঝ͍ͯ͠Δ 7JFXͲ͖͑͋͞Ε 1SFTFOUFSͷςετͰ͖Δ
1 public class UserPresenterTest { 2 @Test 3 public void
testFetchUser() throws Exception { 4 final AtomicBoolean called = new AtomicBoolean(); 5 mMockClient.mock("/v4/users/1.json").to(200, "user.json"); 6 7 class MockedView implements UserView { 8 @Override 9 public void showName(String name) { 10 called.set(true); 11 assertThat(name).isEqualTo("hisaichi5518"); 12 } 13 } 14 15 UserPresenter presenter = new UserPresenter(new MockedView()); 16 presenter.fetchUser(1); 17 assertThat(called.get()).isEqualTo(true); 18 } 19 } 7JFXͲ͖
1 public class UserPresenterTest { 2 @Test 3 public void
testFetchUser() throws Exception { 4 final AtomicBoolean called = new AtomicBoolean(); 5 mMockClient.mock("/v4/users/1.json").to(200, "user.json"); 6 7 class MockedView implements UserView { 8 @Override 9 public void showName(String name) { 10 called.set(true); 11 assertThat(name).isEqualTo("hisaichi5518"); 12 } 13 } 14 15 UserPresenter presenter = new UserPresenter(new MockedView()); 16 presenter.fetchUser(1); 17 assertThat(called.get()).isEqualTo(true); 18 } 19 }
1 public class UserPresenterTest { 2 @Test 3 public void
testFetchUser() throws Exception { 4 final AtomicBoolean called = new AtomicBoolean(); 5 mMockClient.mock("/v4/users/1.json").to(200, "user.json"); 6 7 class MockedView implements UserView { 8 @Override 9 public void showName(String name) { 10 called.set(true); 11 assertThat(name).isEqualTo("hisaichi5518"); 12 } 13 } 14 15 UserPresenter presenter = new UserPresenter(new MockedView()); 16 presenter.fetchUser(1); 17 assertThat(called.get()).isEqualTo(true); 18 } 19 }
None
.71ಋೖͷਐΊํ
.71ಋೖ࣌ͷਐΊํ wཧɿςετΛॻ͍͔ͯΒϦϑΝΫλϦϯά͍ͯ͘͠ wݱ࣮ɿϦϑΝΫλϦϯάͱҰॹʹςετΛॻ͘ wಋೖɺݴ͍ग़ͬ͠ͷ͕ࣗͬͨ wಋೖޙɺνʔϜϝϯόʔ͕֤ʑ.71ΞʔΩςΫ νϟʹԊ࣮ͬͯΛਐΊΔ
ଞʹͬͨ͜ͱ
ଞʹͬͨ͜ͱ wνʔϜϝϯόʔʹ.71ΞʔΩςΫνϟʹ͍ͭͯڞ༗ wIUUQIJTBJDIJIBUFOBCMPHKQFOUSZ wςετͰ։ൃ"1*Λୟ͘Θ͚ʹ͍͔ͳ͍ͷͰ .PDL$MJFOUͷ࡞ wIUUQIJTBJDIJIBUFOBCMPHKQFOUSZ
ଞʹͬͨ͜ͱ w.71ΞʔΩςΫνϟͷαϯϓϧΞϓϦ࡞ w3PCPMFDUSJD(SBEMF5FTU3VOOFSΛܧঝͨ͠ 5FTU3VOOFSΛࣗ࡞ wϒϥϯνຖʹ$*্Ͱ୯ମςετΛ࣮ߦ͢ΔΑ͏ʹ͠ ͯɺͦͷςετ͕௨Βͳ͍ͱϚʔδ͠ͳ͍ϧʔϧ w%FWJDF'BSNΛ࣮ߦ͢ΔϒϥϯνϦϦʔεϒϥϯν ʹߜͬͨ
.71Ͱͬͯͳ͍͜ͱ
.71Ͱͬͯͳ͍͜ͱ w1SFTFOUFSͷ͍ճ͠ wͭͷ7JFXʹෳͷ1SFTFOUFSΛ࣋ͨͤΔ
ͳͥɺ1SFTFOUFSΛ͍·Θ͞ͳ͍ͷ͔ w1SFTFOUFSɺ7JFXͷৼΔ͍ w7JFX͕ҧ͏ͱ͍͏͜ͱɺৼΔ͍ҧ͏
ͳͥɺͭͷ7JFXʹͭͷ1SFTFOUFSʹ͢Δͷ͔ wͭͷ7JFXͷதͰʮϢʔβʔใऔಘͷৼΔ͍ʯʮ࡞ ใऔಘͷৼΔ͍ʯͱ͍͏Α͏ͳୟ͘"1*͝ͱʹ 1SFTFOUFSΛ͚ͨΓ͠ͳ͍ w1SFTFOUFS7JFXͷৼΔ͍ͳͷͰదʹׂ୲ ͕ग़དྷ͍ͯΔͷͰ͋ΕɺͭͰेͳͣ
1SFTFOUFSͷΓग़͠ਐΈ ୯ମςετ૿͖͑ͯͯॱௐ
ൃੜ
ͭͷ1SFTFOUFS͕ େ͖͍Α
ͬͯͳ͍͜ͱͷͭ ͭͷ7JFXʹෳͷ1SFTFOUFS Λ࣋ͨͤΔ
ྫ ͕ͭͷ'SBHNFOU 7JFX ͜ͷ7JFXʹɺׂ͕ͭ͋ Δɻ
ྫ ͓ؾʹೖΓొɾղআ ࡞ใදࣔ ࡞ͷҰཡऔಘɾදࣔ
ͭͷ1SFTFOUFS͕େ͖͍Λ ղܾ͢ΔͨΊʹͬͨ͜ͱ
ׂ͝ͱʹ $VTUPN7JFXʹΓ͚Δ
ྫ ͓ؾʹೖΓొɾղআ ࡞ใදࣔ ࡞ͷҰཡऔಘɾදࣔ
େ͖ͳ1SFTFOUFSΛׂͰ͖ͨ
͜Μͳײ͡Ͱ ϦϑΝΫλϦϯάਐΊ͍ͯ·͢
·ͱΊ
·ͱΊ w6*ςετΛ૿ͦ͏ͱࣦͯ͠ഊ w୯ମςετ͕ॻ͚ͳ͍ͷͭͷΫϥεʹ٧ΊࠐΈա ͍͗ͯΔ͔Β wͭͷΫϥεʹ٧ΊࠐΈա͗Δͷɺܾ·Γࣄ͕ͳ͍ ͔Β wܾ·ΓࣄͱɺΞʔΩςΫνϟ
·ͱΊ wΞʔΩςΫνϟʹ.71Λ࠾༻ w.7$"OESPJEͩͱͷ͕Ͱ͖ͳ͍ w.717JFX͔ΒϓϨθϯςʔγϣϯϩδοΫΛ Ͱ͖Δ w7JFXͷׂ͕େ͖͍ͱ1SFTFOUFS͕େ͖͘ͳͬͯ͠ ·͏ͷͰɺ$VTUPN7JFXʹΓग़ͯ͠খ͘͢͞Δ
Ұॹʹಇ͍ͯ͘Εʙʙʙ ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU
͕࣌ؒ ༨Ε
։ൃ εϐʔυ
ʹ͍ͭͯ
l៉ྷͳίʔυΑΓ։ൃεϐʔυ༏ઌz
ͱ͍͏͜ͱ w៉ྷͳίʔυɺ։ൃεϐʔυͱൺྫ͢Δ
ͳΔ΄Ͳ
͜͏ࢥ͏οε w៉ྷͳίʔυΛॻ͍ͯɺ։ൃεϐʔυ͕མͪͳ͍ w៉ྷͳίʔυɺ։ൃεϐʔυͱൺྫ͢Δ
ͳ͔ͥ w៉ྷͳίʔυͱɺมԽʹڧ͍ίʔυ wมԽʹڧ͍ίʔυߴʹมԽग़དྷΔͷͰɺ։ൃεϐʔ υૣ͍ͣ
มԽʹڧ͍ʢ͓͞Β͍ʣ wมԽʹڧ͍ͱɺʮίʔυͷཧղ͕͍͢͠ʯʮมߋ ΛՃ͍͑͢ʯʮՃ͑ͨมߋͷӨڹΛཧղ͍͢͠ʯ Λࢦ͢
࣮ࡍͲ͏ͩͬͨͷ͔ νʔϜϝϯόʔʹฉ͍ͯΈͨ
.71ΞʔΩςΫνϟΛ͍ΕͯΈͯ ։ൃεϐʔυམͪ·ͨ͠
νʔϜϝϯόʔʹฉ͍ͯΈͨ wʮ.71ΞʔΩςΫνϟͰճ͘Β͍ॻ͘·Ͱ׳Εͳ ͔ͬͨʯ wʮ׳Εͨ͋ͱɺϩδοΫͷॴͱ͔͕୳͘͢͠ͳͬ ͯɺঃʑʹ։ൃ͕࣌ؒ͘ͳ͍ͬͯΔΑ͏ʹײͨ͡ʯ
ͭ·Γ wظతʹݟΕɺ׳ΕΔ·Ͱʹ͕͔͔࣌ؒΔͷͰ։ൃ εϐʔυԼ͕Δ wதظతʹݟΕɺมԽʹڧ͍ίʔυʹͳ͍ͬͯͬͯ ΔͷͰɺ։ൃεϐʔυ্͕͍ͬͯ͘
ͲͪΒͷࢹͰݟΔ͔ ͋ͳͨ࣍ୈ
Ұॹʹಇ͍ͯ͘Εʙʙʙ ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU