- Learning Android Application Testing
- Paul Blundell Diego Torres Milano
- 451字
- 2021-07-23 19:58:54
Even more assertions
If the assertions that are reviewed previously do not seem to be enough for your tests' needs, there is still another class included in the Android framework that covers other cases. This class is MoreAsserts
(http://developer.android.com/reference/android/test/MoreAsserts.html).
These methods are also overloaded to support different parameter types. Among the assertions, we can find the following:
assertAssignableFrom
: This asserts that an object is assignable to a class.assertContainsRegex
: This asserts that an expected Regex matches any substring of the specifiedString
. It fails with the specified message if it does not.assertContainsInAnyOrder
: This asserts that the specifiedIterable
contains precisely the elements expected, but in any order.assertContainsInOrder
: This asserts that the specifiedIterable
contains precisely the elements expected, but in the same order.assertEmpty
: This asserts that anIterable
is empty.assertEquals
: This is for someCollections
not covered in JUnit asserts.assertMatchesRegex
: This asserts that the specifiedRegex
exactly matches theString
and fails with the provided message if it does not.assertNotContainsRegex
: This asserts that the specified Regex does not match any substring of the specified String, and fails with the provided message if it does.assertNotEmpty
: This asserts that some Collections not covered in JUnit asserts are not empty.assertNotMatchesRegex
: This asserts that the specifiedRegex
does not exactly match the specified String, and fails with the provided message if it does.checkEqualsAndHashCodeMethods
: This is a utility used to test theequals()
andhashCode()
results at once. This tests whetherequals()
that is applied to both objects matches the specified result.
The following test checks for an error during the invocation of the capitalization method called via a click on the UI button:
@UiThreadTest public void testNoErrorInCapitalization() { String msg = "capitalize this text"; editText.setText(msg); button.performClick(); String actual = editText.getText().toString(); String notExpectedRegexp = "(?i:ERROR)"; String errorMsg = "Capitalization error for " + actual; assertNotContainsRegex(errorMsg, notExpectedRegexp, actual); }
If you are not familiar with regular expressions, invest some time and visit http://developer.android.com/reference/java/util/regex/package-summary.html because it will be worth it!
In this particular case, we are looking for the word ERROR
contained in the result with a case-insensitive match (setting the flag i
for this purpose). That is, if for some reason, capitalization doesn't work in our application, and it contains an error message, we can detect this condition with the assertion.
Note
Note that because this is a test that modifies the user interface, we must annotate it with @UiThreadTest
; otherwise, it won't be able to alter the UI from a different thread, and we will receive the following exception:
INFO/TestRunner(610): ----- begin exception ----- INFO/TestRunner(610): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. INFO/TestRunner(610): at android.view.ViewRoot.checkThread(ViewRoot.java:2932) [...] INFO/TestRunner(610): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447) INFO/TestRunner(610): ----- end exception -----
- Intel Galileo Essentials
- Pandas Cookbook
- 程序員面試算法寶典
- Rake Task Management Essentials
- R語言游戲數據分析與挖掘
- 人人都是網站分析師:從分析師的視角理解網站和解讀數據
- UVM實戰
- Python算法詳解
- 基于SpringBoot實現:Java分布式中間件開發入門與實戰
- 微課學人工智能Python編程
- Maven for Eclipse
- Neo4j 3.x入門經典
- 跟小樓老師學用Axure RP 9:玩轉產品原型設計
- 可視化H5頁面設計與制作:Mugeda標準教程
- HTML5 and CSS3:Building Responsive Websites