Your SlideShare is downloading. ×
0
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Atec mtg7 unittest
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Atec mtg7 unittest

1,898

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,898
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 2011.05.25 ATEC Mtg#72011 5 26
  • 2. • Twitter id @nowsprinting • • • Java, Swing, Do-Ja, iOS SIer/2011 5 26
  • 3. Agenda • • JUnit • Android Testing Framework • Android Mock2011 5 26
  • 4. 2011 5 26
  • 5. ©snsk at ATEC Mtg#12011 5 26
  • 6. ©snsk at ATEC Mtg#12011 5 26
  • 7. 2011 5 26
  • 8. Activity Http Lib (Mock) Lib (Mock)2011 5 26
  • 9. → Monkey God Hand Runner Activity Http Lib (Mock) Lib (Mock) Robolectric AndroidTest2011 5 26
  • 10. → Android Activity Monkey → God Hand Runner →suspend→resume Activity Http Lib (Mock) Lib (Mock) Robolectric AndroidTest2011 5 26
  • 11. → Monkey Instrumental God Hand Runner TestCase Activity Http Lib (Mock) Lib (Mock) Robolectric AndroidTest2011 5 26
  • 12. JUnit • Android Testing Framework JUnit3 • TestCase • TestCase Assertion2011 5 26
  • 13. TestCase package jp.group.android.atec.testter.logic; public class TwitterLogic { } package package jp.group.android.atec.testter.logic; public class TwitterLogicTest extends AndroidTestCase { } Class ”Test” JUnit TestCase2011 5 26
  • 14. “test” + + public void testTwitterLogicAuthorization() { Authorization auth4test = ... TwitterLogic target = new TwitterLogic(auth4test); assertNotNull("Twitter ", target.twitter); } Assertion2011 5 26
  • 15. assert()2011 5 26
  • 16. 2011 5 26
  • 17. Android Testing Framework2011 5 26
  • 18. Test Project2011 5 26
  • 19. eclipse package explorer New Test Project...2011 5 26
  • 20. Dialog (1/2) TestProject Project2011 5 26
  • 21. Dialog (2/2) package • • Class package2011 5 26
  • 22. Why?2011 5 26
  • 23. Android Testing Framework /2011 5 26
  • 24. Android Testing Framework /2011 5 26
  • 25. Android Testing Framework / • • Class package package2011 5 26
  • 26. TestCase2011 5 26
  • 27. Test Cases (1/2) • AndroidTestCase • ApplicationTestCase • LoaderTestCase • ProviderTestCase2 • ServiceTestCase ※ JUnit TestCase2011 5 26
  • 28. Test Cases (1/2) • AndroidTestCase • ApplicationTestCase • LoaderTestCase Testter • ProviderTestCase2 • ServiceTestCase ※ JUnit TestCase2011 5 26
  • 29. Test Cases (2/2) • InstrumentationTestCase • ActivityTestCase • ActivityInstrumentationTestCase2 • ActivityUnitTestCase • SingleLaunchActivityTestCase • SyncBaseInstrumentation2011 5 26
  • 30. AndroidTestCase2011 5 26
  • 31. AndroidTestCase • Activity • Context getContext() Context2011 5 26
  • 32. public class PreferenceLogicTest extends AndroidTestCase { public void testWriteReadToken() { PreferenceLogic logic = PreferenceLogic.getInstance(); logic.writeToken(getContext(), new AccessToken("11111", "22222")); AccessToken token = logic.readToken(getContext()); assertEquals("11111", token.getToken()); assertEquals("22222", token.getTokenSecret()); } }2011 5 26
  • 33. ActivityInstrumentation TestCase22011 5 26
  • 34. ActivityInstrumentation TestCase2 • Activity • Activity • Context getContext() • ActivityInstrumentationTestCase @Deprecated2011 5 26
  • 35. package jp.group.android.atec.testter;public class AuthActivityTest extends ActivityInstrumentationTestCase2<AuthActivity> { protected void setUp() throws Exception { super.setUp(); setActivityInitialTouchMode(true); mIntent = new Intent(); setActivityIntent(mIntent); mActivity = getActivity(); mEditText = (EditText) mActivity.findViewById(R.id.pinEdit); mButton = (Button) mActivity.findViewById(R.id.registBtn); }2011 5 26
  • 36. package jp.group.android.atec.testter;public class AuthActivityTest extends ActivityInstrumentationTestCase2<AuthActivity> { protected void setUp() throws Exception { super.setUp(); setActivityInitialTouchMode(true); mIntent = new Intent(); Activity setActivityIntent(mIntent); mActivity = getActivity(); mEditText = (EditText) mActivity.findViewById(R.id.pinEdit); mButton = (Button) mActivity.findViewById(R.id.registBtn); } package res2011 5 26
  • 37. public void testRegistBtnText() { // assertTrue(mButton.getText().toString() .equalsIgnoreCase(" ")); } Assertion2011 5 26
  • 38. ※ UI public void testClickButton() { mActivity.runOnUiThread(new Runnable() { public void run() { try { mButton.performClick(); assertXxx(...); } catch (RuntimeException e) { assertXxx(...); } } }); }2011 5 26
  • 39. private2011 5 26
  • 40. private private final PreferenceLogic preferenceLogic = PreferenceLogic.getInstance(); private Drawable getCacheDrawable(URL url) { (snip) }2011 5 26
  • 41. Class<AuthActivity> clazz = AuthActivity.class; Field field = clazz .getDeclaredField("preferenceLogic"); Method method = getClass() .getMethod("getCacheDrawable"); method.invoke();2011 5 26
  • 42. CV2011 5 26
  • 43. Fragile Test private final PreferenceLogic preferenceLogic = PreferenceLogic.getInstance(); private Drawable getCacheDrawable(URL url) { (snip) } default Package Private2011 5 26
  • 44. ※ Class<View> clazz = View.class; Field field = clazz.getDeclaredField("mOnClickListener"); field.setAccessible(true); assertTrue(field.get(mButton) != null); AndroidSDK Class field → Mock2011 5 26
  • 45. 2011 5 26
  • 46. public AccessToken auth(String pin) { AccessToken accessToken = null; try { (snip) } catch (TwitterException e) { (snip) throw new RuntimeException(e); } return accessToken; } ==2011 5 26
  • 47. fail try { target.auth(null); fail("Twitter#getOAuthAccessToken() "); } catch (RuntimeException e) { assertEquals("catch ", expected, e.getCause()); }2011 5 26
  • 48. Android Mock2011 5 26
  • 49. Android Mock • Dalvk EasyMock • Mock Class2011 5 26
  • 50. public AccessToken auth(String pin) { AccessToken accessToken = null; try { if (pin == null || "".equals(pin.trim())) { accessToken = twitter.getOAuthAccessToken(); } else { (snip) } } catch (TwitterException e) { (snip) } Twitter4J (snip) }2011 5 26
  • 51. 1/2 @UsesMocks(Twitter.class) public void testAuth_ _PIN null() { // setup mock AccessToken expectedToken = new AccessToken("testToken", "testSecret"); Twitter Mock Twitter twitterMock = AndroidMock.createMock(Twitter.class); AndroidMock.expect(twitterMock .getOAuthAccessToken()).andReturn(expectedToken); AndroidMock.replay(twitterMock);2011 5 26
  • 52. 2/2 // setup test target TwitterLogic target = new TwitterLogic(); target.twitter = twitterMock; Mock // do test. AccessToken actual = target.auth(null); assertEquals(" AccessToken ", expectedToken, actual); // Mock AndroidMock.verify(twitterMock); } Mock2011 5 26
  • 53. @UsesMocks(Twitter.class) public void testAuth_ _ () { // setup mock TwitterException expected = new TwitterException("Unauthorized", null, 401); Twitter twitterMock = AndroidMock .createMock(Twitter.class); AndroidMock.expect(twitterMock .getOAuthAccessToken()).andThrow(expected); AndroidMock.replay(twitterMock);2011 5 26
  • 54. http://www.slideshare.net/goyoki/an-approach-to-improving-the-maintainability- of-unit-tests-xpjugkansai20112011 5 26
  • 55. • backlog wiki •2011 5 26
  • 56. 2011.05.25 20:012011 5 26

×