Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(250)

Side by Side Diff: testing/android/docs/junit4.md

Issue 2864483004: Add more common errors to JUnit4 documentation (Closed)
Patch Set: address comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # JUnit 4 Migration 1 # JUnit 4 Migration
2 2
3 As of Android 24 (N), JUnit3 style javatests have been deprecated for the new 3 As of Android 24 (N), JUnit3 style javatests have been deprecated for the new
4 JUnit4-based [Android Testing Support Library][1]. 4 JUnit4-based [Android Testing Support Library][1].
5 We are in the process of changing all instrumentation tests in chromium to 5 We are in the process of changing all instrumentation tests in chromium to
6 JUnit4 style. This doc explains the differences between JUnit3 and JUnit4 6 JUnit4 style. This doc explains the differences between JUnit3 and JUnit4
7 instrumentation tests and how to write or convert them. 7 instrumentation tests and how to write or convert them.
8 8
9 [TOC] 9 [TOC]
10 10
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 // 2: Code here runs before @Before method 139 // 2: Code here runs before @Before method
140 base.evaluate() 140 base.evaluate()
141 // 3: Code here runs after @After method 141 // 3: Code here runs after @After method
142 } 142 }
143 } 143 }
144 } 144 }
145 } 145 }
146 ``` 146 ```
147 147
148 148
149 ## Caveats 149 ## Common Errors
150 150
151 1. Instrumentation tests that rely on test thread to have message handler 151 1. Instrumentation tests that rely on test thread to have message handler
152 will not work. For example error message: 152 will not work. For example error message:
153 153
154 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 154 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
155 155
156 Please utilize `@UiThreadTest` or 156 or
157 `ActivityTestRule.runOnUiThread(Runnable r)` to refactor these tests.
158 For more, check this [GitHub issue][6]
159 157
160 1. Use `@UiThreadTest` with caution. Currently, 158 java.lang.IllegalStateException: The current thread must have a looper!
161 **@UiThreadTest is only effective when UiThreadTestRule or 159
162 ActivityTestRule is declared** in the test class. Please use 160 Please utilize `ActivityTestRule.runOnUiThread(Runnable r)` to refactor
163 `android.support.test.annotation.UiThreadTest`, not 161 these tests. For more, check this [GitHub issue][6]
164 `android.test.UiThreadTest`. When using @UiThreadTest, **it would cause 162
165 `setUp` and `tearDown` to run in Ui Thread** as well. Avoid that by simply 163 1. Use `@UiThreadTest` with caution!!
166 calling [`runOnUiThread`][9] or [`runOnMainSync`][10] with a Runnable. 164 - Currently, **@UiThreadTest is only effective when UiThreadTestRule or
165 ActivityTestRule is declared** in the test class.
166 - Please use **`android.support.test.annotation.UiThreadTest`, NOT
167 `android.test.UiThreadTest`**.
168 - When using @UiThreadTest, **it would cause `setUp` and `tearDown` to
169 run in Ui Thread** as well. Avoid that by calling [`runOnUiThread`][9]
170 or [`runOnMainSync`][10] with a Runnable.
167 171
168 ```java 172 ```java
169 // Wrong test 173 // Wrong test
170 public class Test { 174 public class Test {
171 @Rule 175 @Rule
172 public ActivityTestRule<MyActivity> mRule = new ActivityTestRule<>( 176 public ActivityTestRule<MyActivity> mRule = new ActivityTestRule<>(
173 MyActivity.class> 177 MyActivity.class>
174 178
175 @Before 179 @Before
176 public void setUp() { 180 public void setUp() {
(...skipping 27 matching lines...) Expand all
204 mRule.runOnUiThread(new Runnable() { 208 mRule.runOnUiThread(new Runnable() {
205 @Override 209 @Override
206 public void run() { 210 public void run() {
207 actionThatNeedsUiThread(); 211 actionThatNeedsUiThread();
208 } 212 }
209 }); 213 });
210 } 214 }
211 } 215 }
212 ``` 216 ```
213 217
214
215 1. `assertEquals(float a, float b)` and `assertEquals(double a, double b)` are 218 1. `assertEquals(float a, float b)` and `assertEquals(double a, double b)` are
216 deprecated in JUnit4's Assert class. **Despite only generating a warning at 219 deprecated in JUnit4's Assert class. **Despite only generating a warning at
217 build time, they fail at runtime.** Please use 220 build time, they fail at runtime.** Please use
218 `Assert.assertEquals(float a, float b, float delta)` 221 `Assert.assertEquals(float a, float b, float delta)`
219 222
223 1. Errorprone expects all public methods starting with `test...` to be
224 annotated with `@Test`. Failure to meet that expectation will cause
225 errorprone to fail with something like this:
226
227 [JUnit4TestNotRun] Test method will not be run; please add @Test annotat ion
228
229 In particular, you may see this when attempting to disable tests. In that
230 case, the test should be annotated with both @DisabledTest and @Test.
220 231
221 ## Common questions 232 ## Common questions
222 233
223 - Q: Are `@Test` and `@LargeTest/@MediumTest/@SmallTest` annotation both 234 - Q: Are `@Test` and `@LargeTest/@MediumTest/@SmallTest` annotation both
224 necessary? 235 necessary?
225 - A: Yes, both are required for now. We plan to refactor this in the 236 - A: Yes, both are required for now. We plan to refactor this in the
226 future. 237 future.
227 - Q: Isn't the inheritance of the Test classes just migrated to inheritance 238 - Q: Isn't the inheritance of the Test classes just migrated to inheritance
228 of TestRules? 239 of TestRules?
229 - A: Yes. During the migration, we plan to maintain a 1:1 mapping between 240 - A: Yes. During the migration, we plan to maintain a 1:1 mapping between
(...skipping 15 matching lines...) Expand all
245 [1]: https://developer.android.com/topic/libraries/testing-support-library/index .html 256 [1]: https://developer.android.com/topic/libraries/testing-support-library/index .html
246 [2]: https://cs.chromium.org/chromium/src/android_webview/tools/system_webview_s hell/layout_tests/AndroidManifest.xml?l=36 257 [2]: https://cs.chromium.org/chromium/src/android_webview/tools/system_webview_s hell/layout_tests/AndroidManifest.xml?l=36
247 [3]: http://junit.org/junit4/javadoc/4.12/org/junit/rules/TestRule.html 258 [3]: http://junit.org/junit4/javadoc/4.12/org/junit/rules/TestRule.html
248 [4]: https://developer.android.com/reference/android/support/test/rule/ActivityT estRule.html 259 [4]: https://developer.android.com/reference/android/support/test/rule/ActivityT estRule.html
249 [5]: https://github.com/yoland68/chromium-junit-auto-migrate 260 [5]: https://github.com/yoland68/chromium-junit-auto-migrate
250 [6]: http://github.com/skyisle/android-test-kit/issues/121 261 [6]: http://github.com/skyisle/android-test-kit/issues/121
251 [7]: https://bugs.chromium.org/p/chromium/issues/detail?id=640116 262 [7]: https://bugs.chromium.org/p/chromium/issues/detail?id=640116
252 [8]: http://junit.org/junit4/javadoc/4.12/org/junit/rules/RuleChain.html 263 [8]: http://junit.org/junit4/javadoc/4.12/org/junit/rules/RuleChain.html
253 [9]: https://developer.android.com/reference/android/app/Instrumentation.html#ru nOnMainSync(java.lang.Runnable) 264 [9]: https://developer.android.com/reference/android/app/Instrumentation.html#ru nOnMainSync(java.lang.Runnable)
254 [10]: https://developer.android.com/reference/android/support/test/rule/UiThread TestRule.html#runOnUiThread(java.lang.Runnable) 265 [10]: https://developer.android.com/reference/android/support/test/rule/UiThread TestRule.html#runOnUiThread(java.lang.Runnable)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698