Slide 1

Slide 1 text

!IJTBJDIJ(.01&1"#0JOD طଘͷ"OESPJEΞϓϦΛ ϦϑΝΫλϦϯά͍ͯ͘͠

Slide 2

Slide 2 text

γχΞΤϯδχΞ !IJTBJDIJ ٢ߴ༝ཬࢠ٢ߴ༝ཬࢠ٢ߴ༝ཬࢠ XXXZPTIJUBLBZVSJLPDPN

Slide 3

Slide 3 text

NJOOF ϛϯω

Slide 4

Slide 4 text

ࠓ͸ɺ"OESPJEΞϓϦΛ୲౰த

Slide 5

Slide 5 text

طଘͷ"OESPJEΞϓϦΛ ϦϑΝΫλϦϯά͢Δ࿩

Slide 6

Slide 6 text

ͳʹΛ࿩͔͢ w͍͔ͭ͘ى͖ͨ໰୊ʹ͍ͭͯɾͲ͏΍ͬͯղܾ͔ͨ͠

Slide 7

Slide 7 text

࿩͞ͳ͍͜ͱ w3Y+BWBͱ͔%BUB#JOEJOHͱ͔φ΢͍ϥΠϒϥϦͷ࿩ w௒ઈඒ͍͠ઃܭͷ࿩

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

೥ळʙ w"OESPJEΞϓϦͷ։ൃελʔτ w౰ॳ͸"OESPJEνʔϜ͸ਓ wJ04ΞϓϦʹൺ΂ͯػೳͷ͕ࠩ͋ͬͨͷͰɺͱʹ͔͘ ։ൃεϐʔυ༏ઌ wIUUQTQFQBCPDPNSFDSVJUJOUFSWJFX @

Slide 10

Slide 10 text

೥Նʙ w"OESPJEΞϓϦνʔϜ͕ਓʹͳͬͨ wࣗ෼΋͜ͷࠒʹ"OESPJEνʔϜʹೖͬͨ

Slide 11

Slide 11 text

͜Ε͔Βόʔϯͱ͍ͧ͘ʙʂ

Slide 12

Slide 12 text

໰୊ൃੜ

Slide 13

Slide 13 text

ςετ͕ͳ͍໰୊

Slide 14

Slide 14 text

ͳͥςετ͕ඞཁͳͷ͔ wΑΓ৴པग़དྷΔΞϓϦʹ͠ͳ͚Ε͹ͳΒͳ͍͔Β

Slide 15

Slide 15 text

৴པग़དྷΔΞϓϦͬͯͳʹ wΞϓϦʹόά͕গͳ͍ wΞϓϦ͕ಥવམͪͳ͍ wαʔϏεӡӦݩ͕৴༻ग़དྷΔ wͳͲͳͲ༷ʑͳཁҼ͕͋Δ

Slide 16

Slide 16 text

৴པग़དྷΔΞϓϦͬͯͳʹ wΞϓϦʹόά͕গͳ͍ wΞϓϦ͕ಥવམͪͳ͍ wαʔϏεӡӦݩ͕৴༻ग़དྷΔ wͳͲͳͲ༷ʑͳཁҼ͕͋Δ ຬ͍ͨͨ͠

Slide 17

Slide 17 text

৴པग़དྷΔΞϓϦʹͳΔͨΊ ςετ͸ඞཁ

Slide 18

Slide 18 text

ςετͳ͍໰୊Λ ղܾ͢ΔͨΊʹ΍ͬͨ͜ͱ

Slide 19

Slide 19 text

ղܾ͢ΔͨΊʹ w6*ςετΛॻ͘ wςετͷ೔ͷಋೖ w%FWJDF'BSNΛ࢖͏

Slide 20

Slide 20 text

6*ςετΛॻ͜͏ wϙνϙνςετΛগ͠͸ࣗಈԽ͍ͨ͠ w&TQSFTTPΛར༻͍ͯ͠·͢

Slide 21

Slide 21 text

1 @RunWith(AndroidJUnit4.class) 2 @LargeTest 3 public class HelloWorldEspressoTest { 4 5 @Rule 6 public ActivityTestRule mActivityRule 7 = new ActivityTestRule(MainActivity.class); 8 9 @Test 10 public void listGoesOverTheFold() { 11 onView(withText("Hello world!")).check(matches(isDisplayed())); 12 } 13 }

Slide 22

Slide 22 text

1 @RunWith(AndroidJUnit4.class) 2 @LargeTest 3 public class HelloWorldEspressoTest { 4 5 @Rule 6 public ActivityTestRule mActivityRule 7 = new ActivityTestRule(MainActivity.class); 8 9 @Test 10 public void listGoesOverTheFold() { 11 onView(withText("Hello world!")).check(matches(isDisplayed())); 12 } 13 }

Slide 23

Slide 23 text

ςετͷ೔ͷಋೖ wςετΛॻ͘͜ͱʹ׳Εͯͳ͍ਓ͕ଟ͔ͬͨ wςετΛॻ͘͜ͱʹ׳ΕΔͨΊʹ΋ɺςετ͚ͩΛॻ ͘೔Λिؒʹ౓ઃ͚Δ͜ͱʹͨ͠

Slide 24

Slide 24 text

%FWJDF'BSNͷར༻ w6*ςετΛॻ͍ͯ΋ܧଓతʹ࣮ߦ͍ͯ͠ͳ͍ͱҙຯ͕ ͳ͍ w"NB[PO͕ࣾఏڙ͢Δʮ࣮ࡍͷσόΠεΛར༻ͯ͠ς ετΛ࣮ߦͯ͘͠ΕΔʯαʔϏε wϒϥϯνຖʹ࣮ߦ͢ΔΑ͏ʹͯ͠ɺςετ͕௨Βͳ͍ ͱϚʔδ͠ͳ͍ϧʔϧΛܾΊͨ

Slide 25

Slide 25 text

ਐΊํ

Slide 26

Slide 26 text

ػೳ։ൃ͸ͦͷ··ਐΊΔ wػೳ։ൃ͸ͦͷ··ਐΊͳ͕Βɺ৽͘͠։ൃ͢Δͱ͜ ΖͷςετΛͳΔ΂͘ॻ͍͍ͯ͘ํ਑ wνʔϜϝϯόʔ͕૿͑ͨͷ͸ػೳ։ൃΛΑΓεϜʔζ ʹߦ͏ͨΊͳͷͰɺςετΛॻ͘ͱ͍͏͜ͱ͸ػೳ։ ൃΛࢭΊͯ·Ͱ΍Δ͜ͱͰ͸ͳ͔ͬͨ

Slide 27

Slide 27 text

δϫδϫͱ6*ςετ͕ ૿͖͑ͯͨ

Slide 28

Slide 28 text

໰୊ൃੜ

Slide 29

Slide 29 text

6*ςετͭΒ͍໰୊

Slide 30

Slide 30 text

6*ςετͷͳʹ͕ͭΒ͍ wλΠϛϯά࣍ୈͰ࣌ʑίέΔςετ͕૿͑ͨ wେ͖ΊͷมߋΛߦ͏ͱ6*ςετͷ࡞Γ௚͠ʹͳͬͯԿ ౓΋6*ςετΛॻ͖௚ͯ͠Δ w6*ςετͷ࣮ߦ͕࣌ؒ௕ͯ͘ɺ଴͕ͭ࣌ؒ૿͑ͨ wͦ΋ͦ΋6*ςετΛॻͨ͘Ίʹ֮͑Δࣄ͕ଟͯ͘େม

Slide 31

Slide 31 text

ςετΛͭΒ͍΋ͷආ͚͍ͨ΋ͷʹ͸ ͨ͘͠ͳ͍ͷͰղܾ͍ͨ͠

Slide 32

Slide 32 text

6*ςετΑΓ୯ମςετͷ ΄͏͕ྑ͍ؾ͕͢Δ

Slide 33

Slide 33 text

6*ςετWT୯ମςετ w6*ςετ͸ɺςετͷ୯Ґ͕େ͖͍ w୯ମςετ͸ɺϝιου୯ҐͰਖ਼͘͠ಈ࡞͢Δͷ͔ݕ ূ͢ΔͷͰςετͷ୯Ґ͕খ͍͞ w୯ମςετ͸ɺ֮͑Δ͜ͱ΋গͳ͍

Slide 34

Slide 34 text

΍ͬͺ୯ମςετͷ΄͏͕ ྑ͍ؾ͕͢Δ

Slide 35

Slide 35 text

ͳͥ๻ͨͪ͸6*ςετΛॻ ͍͍ͯΔΜͩ

Slide 36

Slide 36 text

"OESPJE5FTUͰͳ͍ͱಈ͔ͳ͍ Ϋϥεͷதʹςετ͍ͨ͠΋ͷ͕ ͋Δ

Slide 37

Slide 37 text

ͳͥ୯ମςετͷதͰಈ͔ͳ͍Ϋϥε ͷதʹςετ͍ͨ͠΋ͷ͕͋Δ

Slide 38

Slide 38 text

̍ͭͷΫϥεͷ੹຿͕େ͖͗͢ɻ Ϋϥεͷ੹຿Λখ͘͞ग़དྷ͍ͯͳ ͍

Slide 39

Slide 39 text

ͭͷΫϥεʹ٧ΊࠐΈա͗໰୊

Slide 40

Slide 40 text

ͳͥͭͷΫϥεʹ٧ΊࠐΈա͗Δͱ໰୊ͳͷ͔ w୯ମςετ͕ॻ͖ʹ͍͘ wαʔϏεΛΑΓ੒௕ͤ͞Δʹ͸ɺมԽʹڧ͘ͳ͚Ε͹ ͳΒͳ͍

Slide 41

Slide 41 text

มԽʹڧ͍ wมԽʹڧ͍ͱ͸ɺʮίʔυͷཧղ͕͠΍͍͢ʯʮมߋ ΛՃ͑΍͍͢ʯʮՃ͑ͨมߋͷӨڹΛཧղ͠΍͍͢ʯ Λࢦ͢

Slide 42

Slide 42 text

ͭͷΫϥεʹ٧ΊࠐΈա͗Δͱʜ wʮίʔυͷཧղ͕͠ʹ͍͘ʯʮมߋΛՃ͑ʹ͍͘ʯʮՃ ͑ͨมߋͷӨڹΛཧղ͠ʹ͍͘ʯ w୯ମςετͰςετ͠ʹ͍͘

Slide 43

Slide 43 text

ͳͷͰ ͭͷΫϥεʹ٧ΊࠐΈ͗͢͸໰୊

Slide 44

Slide 44 text

ͭͷΫϥεʹ٧ΊࠐΈա͗໰୊Λ ղܾ͢ΔͨΊʹ΍ͬͨ͜ͱ

Slide 45

Slide 45 text

ͳͥ੹຿Λখ͘͞ग़དྷ͍ͯ ͳ͍ͷ͔

Slide 46

Slide 46 text

Ϋϥε͕ԿΛ୲౰͢΂͖ͳͷ͔໌֬ ʹܾ·͍ͬͯͳ͍͔Β

Slide 47

Slide 47 text

ͭ·Γɺܾ·ΓࣄΛܾΊͯ͋͛Ε͹Α͍

Slide 48

Slide 48 text

ܾ·ΓࣄΞʔΩςΫνϟ

Slide 49

Slide 49 text

.71ΞʔΩςΫνϟΛ࠾༻͢Δ

Slide 50

Slide 50 text

ϩδοΫ wϓϨθϯςʔγϣϯϩδοΫ wϏδωεϩδοΫ

Slide 51

Slide 51 text

ϓϨθϯςʔγϣϯϩδοΫ ඞཁͳ஋ΛϏδωεϩδοΫʹ ౉͢·ͰͷৼΔ෣͍

Slide 52

Slide 52 text

ϏδωεϩδοΫ "1*΍σʔλϕʔεͳͲ͔Β ஋Λಘͯɺฦ͢

Slide 53

Slide 53 text

ϓϨθϯςʔγϣϯϩδοΫ ϏδωεϩδοΫ͔Β ฦ͖ͬͯͨ஋Λ੔ܗͯ͠ දࣔ͢ΔৼΔ෣͍

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

.71ΞʔΩςΫνϟ

Slide 56

Slide 56 text

.7$ͷ೿ੜ

Slide 57

Slide 57 text

.7$

Slide 58

Slide 58 text

.PEFM7JFX$POUSPMMFS

Slide 59

Slide 59 text

.7$͸"OESJPEΞϓϦʹ޲͍͍ͯͳ͍

Slide 60

Slide 60 text

7JFXͷૢ࡞ "DUJWJUZͰߦ͏

Slide 61

Slide 61 text

$POUSPMMFS "DUJWJUZʹॻ͘

Slide 62

Slide 62 text

7JFX$POUSPMMFS"DUJWJUZ

Slide 63

Slide 63 text

Ϋϥεͷ੹຿Λখ͘͞ग़དྷ͍ͯͳ͍

Slide 64

Slide 64 text

.7$͸"OESJPEΞϓϦʹ޲͍͍ͯͳ͍

Slide 65

Slide 65 text

.71

Slide 66

Slide 66 text

.PEFM7JFX1SFTFOUFS

Slide 67

Slide 67 text

.PEFM wϏδωεϩδοΫΛॻ͘ w1SFTFOUFSʹґଘ͠ͳ͍ w7JFXʹґଘ͠ͳ͍

Slide 68

Slide 68 text

7JFX wϢʔβʔ͔ΒͷೖྗΛड͚औΔ wϢʔβʔ͔ΒͷೖྗΛ1SFTFOUFSʹ౉͢ wը໘ͷදࣔ΍ߋ৽Λߦ͏

Slide 69

Slide 69 text

1SFTFOUFS wϓϨθϯςʔγϣϯϩδοΫΛॻ͘ w7JFXͷߋ৽͸ɺJOUFSGBDFΛܦ༝ͯ͠ߦ͏

Slide 70

Slide 70 text

.7$WT.71

Slide 71

Slide 71 text

.7$

Slide 72

Slide 72 text

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() { 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 }

Slide 73

Slide 73 text

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() { 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ͷߋ৽

Slide 74

Slide 74 text

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() { 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 } ೖྗΛड͚औΔ

Slide 75

Slide 75 text

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() { 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 } ϓϨθϯςʔγϣϯϩδοΫ

Slide 76

Slide 76 text

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() { 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ͷߋ৽

Slide 77

Slide 77 text

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() { 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ͷߋ৽

Slide 78

Slide 78 text

.71

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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() { 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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

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() { 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 ϓϨθϯςʔγϣϯϩδοΫ

Slide 85

Slide 85 text

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() { 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ͷߋ৽

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

.71͸7JFX͔Β ϓϨθϯςʔγϣϯϩδοΫΛ෼཭ग़དྷΔ

Slide 88

Slide 88 text

͜ΕͰϓϨθϯςʔγϣϯϩδοΫͷςε τ͕୯ମςετͰॻ͚Δͧʙ

Slide 89

Slide 89 text

Ͳ͏͍͏ςετʹͳΔͷ͔

Slide 90

Slide 90 text

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Λܦ༝ͯ͠ߦ͏

Slide 91

Slide 91 text

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ͷςετ͸Ͱ͖Δ

Slide 92

Slide 92 text

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΋Ͳ͖

Slide 93

Slide 93 text

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 }

Slide 94

Slide 94 text

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 }

Slide 95

Slide 95 text

No content

Slide 96

Slide 96 text

.71ಋೖͷਐΊํ

Slide 97

Slide 97 text

.71ಋೖ࣌ͷਐΊํ wཧ૝ɿςετΛॻ͍͔ͯΒϦϑΝΫλϦϯά͍ͯ͘͠ wݱ࣮ɿϦϑΝΫλϦϯάͱҰॹʹςετΛॻ͘ wಋೖ͸ɺݴ͍ग़ͬ͠΃ͷࣗ෼͕΍ͬͨ w౓ಋೖޙ͸ɺνʔϜϝϯόʔ͕֤ʑ.71ΞʔΩςΫ νϟʹԊ࣮ͬͯ૷ΛਐΊΔ

Slide 98

Slide 98 text

ଞʹ΋΍ͬͨ͜ͱ

Slide 99

Slide 99 text

ଞʹ΋΍ͬͨ͜ͱ wνʔϜϝϯόʔʹ.71ΞʔΩςΫνϟʹ͍ͭͯڞ༗ wIUUQIJTBJDIJIBUFOBCMPHKQFOUSZ wςετͰ։ൃ"1*Λୟ͘Θ͚ʹ͸͍͔ͳ͍ͷͰ .PDL$MJFOUͷ࡞੒ wIUUQIJTBJDIJIBUFOBCMPHKQFOUSZ

Slide 100

Slide 100 text

ଞʹ΋΍ͬͨ͜ͱ w.71ΞʔΩςΫνϟͷαϯϓϧΞϓϦ࡞੒ w3PCPMFDUSJD(SBEMF5FTU3VOOFSΛܧঝͨ͠ 5FTU3VOOFSΛࣗ࡞ wϒϥϯνຖʹ$*্Ͱ୯ମςετΛ࣮ߦ͢ΔΑ͏ʹ͠ ͯɺͦͷςετ͕௨Βͳ͍ͱϚʔδ͠ͳ͍ϧʔϧ w%FWJDF'BSNΛ࣮ߦ͢Δϒϥϯν͸ϦϦʔεϒϥϯν ౳ʹߜͬͨ

Slide 101

Slide 101 text

.71Ͱ΍ͬͯͳ͍͜ͱ

Slide 102

Slide 102 text

.71Ͱ΍ͬͯͳ͍͜ͱ w1SFTFOUFSͷ࢖͍ճ͠ wͭͷ7JFXʹෳ਺ͷ1SFTFOUFSΛ࣋ͨͤΔ

Slide 103

Slide 103 text

ͳͥɺ1SFTFOUFSΛ࢖͍·Θ͞ͳ͍ͷ͔ w1SFTFOUFS͸ɺ7JFXͷৼΔ෣͍ w7JFX͕ҧ͏ͱ͍͏͜ͱ͸ɺৼΔ෣͍΋ҧ͏

Slide 104

Slide 104 text

ͳͥɺͭͷ7JFXʹͭͷ1SFTFOUFSʹ͢Δͷ͔ wͭͷ7JFXͷதͰʮϢʔβʔ৘ใऔಘͷৼΔ෣͍ʯʮ࡞ ඼৘ใऔಘͷৼΔ෣͍ʯͱ͍͏Α͏ͳୟ͘"1*͝ͱʹ 1SFTFOUFSΛ෼͚ͨΓ͠ͳ͍ w1SFTFOUFS͸7JFXͷৼΔ෣͍ͳͷͰద੾ʹ໾ׂ෼୲ ͕ग़དྷ͍ͯΔͷͰ͋Ε͹ɺͭͰे෼ͳ͸ͣ

Slide 105

Slide 105 text

1SFTFOUFS΁ͷ੾Γग़͠΋ਐΈ ୯ମςετ΋૿͖͑ͯͯॱௐ

Slide 106

Slide 106 text

໰୊ൃੜ

Slide 107

Slide 107 text

ͭͷ1SFTFOUFS͕ େ͖͍Α໰୊

Slide 108

Slide 108 text

΍ͬͯͳ͍͜ͱͷͭ ͭͷ7JFXʹෳ਺ͷ1SFTFOUFS Λ࣋ͨͤΔ

Slide 109

Slide 109 text

ྫ ੺࿮͕ͭͷ'SBHNFOU 7JFX ͜ͷ7JFXʹ͸ɺ໾ׂ͕ͭ͋ Δɻ

Slide 110

Slide 110 text

ྫ ͓ؾʹೖΓొ࿥ɾղআ ࡞඼৘ใදࣔ ࡞඼ͷҰཡऔಘɾදࣔ

Slide 111

Slide 111 text

ͭͷ1SFTFOUFS͕େ͖͍໰୊Λ ղܾ͢ΔͨΊʹ΍ͬͨ͜ͱ

Slide 112

Slide 112 text

໾ׂ͝ͱʹ $VTUPN7JFXʹ੾Γ෼͚Δ

Slide 113

Slide 113 text

ྫ ͓ؾʹೖΓొ࿥ɾղআ ࡞඼৘ใදࣔ ࡞඼ͷҰཡऔಘɾදࣔ

Slide 114

Slide 114 text

େ͖ͳ1SFTFOUFSΛ෼ׂͰ͖ͨ

Slide 115

Slide 115 text

͜Μͳײ͡Ͱ ϦϑΝΫλϦϯάਐΊ͍ͯ·͢

Slide 116

Slide 116 text

·ͱΊ

Slide 117

Slide 117 text

·ͱΊ w6*ςετΛ૿΍ͦ͏ͱࣦͯ͠ഊ w୯ମςετ͕ॻ͚ͳ͍ͷ͸ͭͷΫϥεʹ٧ΊࠐΈա ͍͗ͯΔ͔Β wͭͷΫϥεʹ٧ΊࠐΈա͗Δͷ͸ɺܾ·Γࣄ͕ͳ͍ ͔Β wܾ·Γࣄͱ͸ɺΞʔΩςΫνϟ

Slide 118

Slide 118 text

·ͱΊ wΞʔΩςΫνϟʹ͸.71Λ࠾༻ w.7$͸"OESPJEͩͱ੹຿ͷ෼཭͕Ͱ͖ͳ͍ w.71͸7JFX͔ΒϓϨθϯςʔγϣϯϩδοΫΛ෼཭ Ͱ͖Δ w7JFXͷ໾ׂ͕େ͖͍ͱ1SFTFOUFS͕େ͖͘ͳͬͯ͠ ·͏ͷͰɺ$VTUPN7JFXʹ੾Γग़ͯ͠খ͘͢͞Δ

Slide 119

Slide 119 text

Ұॹʹಇ͍ͯ͘Εʙʙʙ ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU

Slide 120

Slide 120 text

͕࣌ؒ ༨Ε͹

Slide 121

Slide 121 text

։ൃ εϐʔυ

Slide 122

Slide 122 text

ʹ͍ͭͯ

Slide 123

Slide 123 text

l៉ྷͳίʔυΑΓ։ൃεϐʔυ༏ઌz

Slide 124

Slide 124 text

ͱ͍͏͜ͱ͸ w៉ྷͳίʔυ͸ɺ։ൃεϐʔυͱ൓ൺྫ͢Δ

Slide 125

Slide 125 text

ͳΔ΄Ͳ

Slide 126

Slide 126 text

๻͸͜͏ࢥ͏οε w៉ྷͳίʔυΛॻ͍ͯ΋ɺ։ൃεϐʔυ͕མͪͳ͍ w៉ྷͳίʔυ͸ɺ։ൃεϐʔυͱൺྫ͢Δ

Slide 127

Slide 127 text

ͳ͔ͥ w៉ྷͳίʔυͱ͸ɺมԽʹڧ͍ίʔυ wมԽʹڧ͍ίʔυ͸ߴ଎ʹมԽग़དྷΔͷͰɺ։ൃεϐʔ υ͸ૣ͍͸ͣ

Slide 128

Slide 128 text

มԽʹڧ͍ʢ͓͞Β͍ʣ wมԽʹڧ͍ͱ͸ɺʮίʔυͷཧղ͕͠΍͍͢ʯʮมߋ ΛՃ͑΍͍͢ʯʮՃ͑ͨมߋͷӨڹΛཧղ͠΍͍͢ʯ Λࢦ͢

Slide 129

Slide 129 text

࣮ࡍͲ͏ͩͬͨͷ͔ νʔϜϝϯόʔʹฉ͍ͯΈͨ

Slide 130

Slide 130 text

.71ΞʔΩςΫνϟΛ͍ΕͯΈͯ ։ൃεϐʔυ͸མͪ·ͨ͠

Slide 131

Slide 131 text

νʔϜϝϯόʔʹฉ͍ͯΈͨ wʮ.71ΞʔΩςΫνϟͰճ͘Β͍ॻ͘·Ͱ׳Εͳ ͔ͬͨʯ wʮ׳Εͨ͋ͱ͸ɺϩδοΫͷ৔ॴͱ͔͕୳͠΍͘͢ͳͬ ͯɺঃʑʹ։ൃ͕࣌ؒ୹͘ͳ͍ͬͯΔΑ͏ʹײͨ͡ʯ

Slide 132

Slide 132 text

ͭ·Γ w୹ظతʹݟΕ͹ɺ׳ΕΔ·Ͱʹ͕͔͔࣌ؒΔͷͰ։ൃ εϐʔυ͸Լ͕Δ wத௕ظతʹݟΕ͹ɺมԽʹڧ͍ίʔυʹͳ͍ͬͯͬͯ ΔͷͰɺ։ൃεϐʔυ͸্͕͍ͬͯ͘

Slide 133

Slide 133 text

ͲͪΒͷࢹ఺ͰݟΔ͔͸ ͋ͳͨ࣍ୈ

Slide 134

Slide 134 text

Ұॹʹಇ͍ͯ͘Εʙʙʙ ࠷৽ͷ࠾༻৘ใΛνΣοΫˠ !QC@SFDSVJU