Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android support #31

Closed
vanniktech opened this issue Sep 8, 2015 · 30 comments
Closed

Android support #31

vanniktech opened this issue Sep 8, 2015 · 30 comments

Comments

@vanniktech
Copy link

vanniktech commented Sep 8, 2015

I was trying to add this one to an android project and Gradle fails.

./gradlew pitest
Parallel execution with configuration on demand is an incubating feature.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':module'.
> The 'java' plugin has been applied, but it is not compatible with the Android plugins.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Are there any plans on supporting android?

@szpak
Copy link
Owner

szpak commented Sep 8, 2015

It's the same issue as #24. Do you also use robolectric-gradle-plugin or something else?

Update 2016

There is a @koral--'s version of that plugin for Android. It seems to work fine and it is recommended for Android-based projects.

See: https://github.com/koral--/gradle-pitest-plugin

@vanniktech
Copy link
Author

You don't need that plugin anymore. At least it's no longer mandatory. Google guys have recently launched Java Unit Tests for Android projects, so that can be used. So you only need to include the dependency testCompile 'org.robolectric:robolectric:3.0'.

From the command line you can ./gradlew clean test for executing the tests. The task itself is however named test<Module+Flavor>UnitTest

@szpak
Copy link
Owner

szpak commented Sep 8, 2015

Thanks for the information. I suspect that it also uses JavaBasePlugin instead of JavaPlugin which is not very feasible to support both in the same code base. Nevertheless it is not hopeless, so I will probably give it a shot (one day). Votes from other Android developers willing to use PIT in their project could make that day sooner :).

@emartynov
Copy link

Also interested to try

@mdhornet90
Copy link

Definitely interested.

@gdaolewe
Copy link

Also interested, mutation testing is a great concept that issues like this have always kept me from using in any project.

@JosephYao
Copy link

Definitely interested.

@ghost
Copy link

ghost commented Mar 2, 2016

Very interested

@Endran
Copy link

Endran commented Mar 16, 2016

Me as well!

@vanniktech
Copy link
Author

@szpak what's the state of this, since the creation of this issue quite a few others are interested in this

@szpak
Copy link
Owner

szpak commented Jun 4, 2016

I'm not an Android developer. Is this the only recommended way of testing that would be good to be supported?

@ghost
Copy link

ghost commented Jun 4, 2016

@szpak The document you linked appears to be very old. Look here for more up to date references about testing in Android

@xgouchet
Copy link

Really interested about this as well !

@szpak
Copy link
Owner

szpak commented Jun 15, 2016

I cannot declare when I will be able to take a look at the possibility of implementation that. However, if someone provided a really small/minimal example of the Android application with a test which can be mutated I could use it as an acceptance test (that sunny day).
It would be good to make it possible to run unit tests from Travis, preferable without Android SDK downloaded and installed.

@emartynov
Copy link

emartynov commented Jun 15, 2016

Here is my pet project that has some test in it https://github.com/emartynov/android-template-project. It also runs on Travis.

I also tried to quickly make it working for android https://github.com/emartynov/gradle-pitest-plugin, but should spend more time on it. The problem is that Android plugin can not be used together with Java, but it is actually extending it. Another problem that sources sets are empty at moment plugin applications. And if I'm correct they will be available after evaluation

@szpak
Copy link
Owner

szpak commented Jun 15, 2016

Yup. I had similar observations and because of that I'm not if it will be possible/feasible to have just one plugin class for Java apps and Android apps. However, it was just a brief look.

Thanks @emartynov for the project.

@szpak
Copy link
Owner

szpak commented Jun 15, 2016

Btw, @emartynov This project requires Android SDK which can be problematic (long running) to use on Travis. As I read the aforementioned documentation for unit testing:

Local unit tests are tests that run on your local machine, without needing access to the Android framework or an Android device.

This page also does not mention Android SDK - just mocking Android dependencies.

Is it possible to run unit tests without Android SDK?

@mdhornet90
Copy link

I thought that the primary benefit of Robolectric was that it ran Android code on the JVM. If that's 100% the case, it should absolutely be possible.

@emartynov
Copy link

emartynov commented Jun 15, 2016

@szpak we treat Android SDK as JDK, which you have to download and install once.
After your unit tests should be runnable offline as you expect.

And yes, Robolectric is there to run all tests on JVM, so no needs to create/run emulator or have connected android device

@koral--
Copy link
Contributor

koral-- commented Jul 6, 2016

@emartynov was correct (#31 (comment)) - required data is available after project evaluation.
Additionally it seems that pitest plugin must either apply android plugin (but it doesn't know which one - application, library or test) or be applied after android plugin (like eg. android-apt does).
Here is my try: https://github.com/koral--/gradle-pitest-plugin

There are some issues with tests using particular classes (eg. org.robolectric.annotation.Config) but simple examples (like those from functional tests) seems to work.

UPDATE:
I've managed to fix that issue.

@aballano
Copy link

Any updates on this? Would be really nice to have this working on Android.

@szpak
Copy link
Owner

szpak commented Oct 25, 2016

@Shyish You can use an Android for provided by @koral-- - https://github.com/koral--/gradle-pitest-plugin . It seems to work and as the changes there are quite heavy (and incompatible) I'm not very eager to backport them to the vanilla JVM version.

@FloKaemmerer
Copy link

@koral-- I tried using your plugin on an Android project, but I'm not able to get it to work.

I striped down my project to a simple example: https://github.com/FloKaemmerer/PiProblem
Running the testsuit runs green, no matter if I'm using Androidstudio or gradle.

But when I try to use the pitest task, the test fails.

Any tips would be appreciated.

@aballano
Copy link

@FloKaemmerer I have the same issue at the moment. I think we should translate this conversation to that repo so we don't spam this one, could you please create the issue there?

@FloKaemmerer
Copy link

@Shyish I would have opened an issue over there, but @koral-- didn't enable it :-/

@koral--
Copy link
Contributor

koral-- commented Nov 21, 2016

Sorry, I just enabled isssues and created one: https://github.com/koral--/gradle-pitest-plugin/issues/1
I'll check that.

UPDATE:
Issue reported by @FloKaemmerer was caused by missing RobolectricTestRunner in test. Tests using Android platform APIs may not work without it.

UPDATE 2:
Just released version 0.0.7 does not require robolectric nor any tests source code changes like adding runners. More info in README.

@vanniktech
Copy link
Author

Since there seems to be a successor / fork I'll close this.

@szpak
Copy link
Owner

szpak commented Dec 27, 2017

I would name is an Android version of that plugin. It cannot be used with the "normal" Java projects.

There is a point in the FAQ, so I hope people will be able to find it even having that issue closed.

@vanniktech
Copy link
Author

Oh okay got it. Maybe also mention the Android Version in the README.

@szpak
Copy link
Owner

szpak commented Dec 27, 2017

The FAQ is in the README :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests