I would like to create some automated GUI tests for my android application. I am aware of Robotium and other similar projects but I would like to create my own testing framework from scratch. How can I achieve this?
You can begin by reading the documentation on testing and then taking a look at the source code for Robotium. That's how I would get started, at least.
Related
i am developing an app in android..Am not so much aware of testing methodes .And i have choosen the Junit for automated testing
Now i need to know that Weather Junit and integrated framework is best fit for the purpose or i have to use any other tool for this?
please explain
thanks in advance
The problem with testing an elaborate framework like Android is you must mock an entire smartphone just to run a Hello World app and test it.
So you must use JUnit, because that's the only test runner that Android's own testing libraries support. So, to get test suites like ActivityInstrumentationTestCase2, you must start with JUnit. But major props for even writing tests! That puts you above the majority of the programmers in this industry...
If by "integrated framework" you mean FIT, however, skip it. That stuff is just for high-end consulting.
Can we use JUnit for test driven development in Android ? If not, is there an alternative similar to JUnit ?
I searched a bit on google and also read a SO post Android Test Driven Development
It looks like Android was never made with TDD in mind. I wanted to be sure before I begin learning TDD and doing Android development at the same time.
I think you can completely rely on Robolectric for running your tests in JVM. You get to use JUnit4 for testing your POJOs and Robolectric provides you the support for testing the Android components.
I am also a beginner in TDD for Android Development. I find Robolectric really useful for test driving my code.
This video will tell you almost everything it provides you for unit testing the Android code.
UPDATE:
With the Android studio support and the new Android ecosystem, now unit testing can be done as a first class practice. Refer http://developer.android.com/training/testing/unit-testing/local-unit-tests.html for more details.
There are couple of good approaches to test drive the android code. The most effective ones I have found so far is using MVVM(model-view-viewmodel) or MVP(model-view-presenter) approach, where the business logic as well as presentation logic is decoupled from the view and can be easily be unit tested.
Yeah we can use JUnit for test driven development. To initiate with you can refer to following
link : http://developer.android.com/tools/testing/testing_android.html#JUnit
Following the documentation we can use the junit.framework to have unit testing done.
Here is a bit of explanation of the problem space: http://www.techwell.com/2013/04/applying-test-driven-development-android-development
The conclusion is you should use Robolectric. Unfortunately Robolectric is slow, and if you follow TDD even on a pragmatic level, you will end up with a couple of hundreds of test, that will run for couple of 10 seconds. And that is not you want to do with TDD. TDD test package should run at most in seconds.
My advise is:
Create wrapper classes around Android classes that simply call the Android class.
Write your app logic in pure Java.
Use Junit (or TestNG or whatever pleases you) to test you model/business logic
Use occasionally Robolectric for the wrapper classes (probably you won't have to use)
(You can write integration tests that use multiple classes, Robolectric, etc. but only run it on a separate Continous Integration server eg. hourly)
With this approach your logic will be more portable as well.
I have been developing Android application for a small company and during the development process we need to do repetitive testing of some modules, So i searched tools for doing automation testing (unit testing) of the app. Android has a unit test tool however to write those test cases will itself take more time then to actually test it by hand.
I found some apps which do some great stuff and provide good charts for example Robolectric, robotium, fonemonkey4android, but am confused to what to be used, any one with any experience with the same can help.
I checked for previous questions on the similar terms like below
https://stackoverflow.com/questions/522312/best-practices-for-unit-testing-android-apps
But all the threads are very old and not so informative to decide on which to choose..
I think first you need figure out which part of your code you want to test.
For codes which doesn't related to user interface, you can test them with Robolectric. With Robolectric, the unit test code is the same to those written for java application. But it's not suitable for test ui components.
If you want to test ui, then you can choose robotium. But i always doubt whether it's worth writing tests for ui, they change too often..
I want to test my project using an instrumentation test. I am a beginner at this.
Can anybody provide a basic tutorial for this?
Robotium is a great tool for testing Android app's you should take a look at it and it's very easy to use.
http://code.google.com/p/robotium/
To use ActivityInstrumentationTestCase2 we can create a wrapper over it. In order to do so you can try out example that this blog talks about.
testing Activities in simple way
The idea used is to take out common code in wrapper called BaseActivityTest so that while testing you just need to do minimum steps, and your activity gets tested too.
I'm looking at using Frank for UI testing our iOS application(s). Is there a similar library with support for Android? I'm currently using Robotium, but thought it would be nice to be able to specify tests in the same format across both platforms.
Would it be possible to get something like JBehave to run on Android?
As scompt.com said. The project is now officially open sourced and is called Calabash.
I wrote a short blog post about it:
http://blog.lesspainful.com/2012/03/07/Calabash-Android/
Calabash is also available on iOS and with a bit of work and two similar apps you can run the same feature on iOS and Android.
You can read more general stuff about Calabash here:
http://blog.lesspainful.com/2012/03/07/Calabash/
The guys from lesspainful.com have open sourced some of their special sauce on github. It lets you do cucumber testing on android in the emulator and local devices. Because it's the same code that they're running for their service, you should be able to test your features on multiple devices if you sign up.
Could you use Cuke4Duke to drive Robotium? Or use JRuby/Cucumber to drive Robotium?
No, robotium is a BDD on dvm not jvm thus no driver exists with jvm frameworks such as jbehave, etc
I've recently started using www.LessPainful.com - there are some limitations (you can't write your own steps) and it's quite an early stage company, but so far the testing has at least proved useful, especially with different screen sizes, plus they've automated some good things like orientation (I think they use motors on real phones!).
(for reference on iOS we're using Frank - https://github.com/moredip/frank- and on WP7 we've written our own - https://github.com/Expensify/WindowsPhoneTestFramework)
I've been able to open-source my work in this area:
https://bitbucket.org/proxama/windows_android_cucumber_runner
https://bitbucket.org/proxama/android_cucumdroid
It allows you to write your own features and steps to exercise the UI automator. This means it runs all on the device.
It's probably not as easy to use as it could be but the Windows gui app is designed to wrap the ANT tasks that make it actually run.
I have tested my app using MonkeyTalk. It may help you. https://www.cloudmonkeymobile.com/monkeytalk