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

Comments

Projects
None yet
@vanniktech

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

This comment has been minimized.

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

This comment has been minimized.

vanniktech commented Sep 8, 2015

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

This comment has been minimized.

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 :).

@szpak szpak added the enhancement label Sep 8, 2015

@emartynov

This comment has been minimized.

emartynov commented Sep 25, 2015

Also interested to try

@mdhornet90

This comment has been minimized.

mdhornet90 commented Jan 11, 2016

Definitely interested.

@gdaolewe

This comment has been minimized.

gdaolewe commented Jan 17, 2016

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

@JosephYao

This comment has been minimized.

JosephYao commented Feb 11, 2016

Definitely interested.

@bnacey

This comment has been minimized.

bnacey commented Mar 2, 2016

Very interested

@Endran

This comment has been minimized.

Endran commented Mar 16, 2016

Me as well!

@vanniktech

This comment has been minimized.

vanniktech commented May 27, 2016

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

@szpak

This comment has been minimized.

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?

@bnacey

This comment has been minimized.

bnacey 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

This comment has been minimized.

xgouchet commented Jun 15, 2016

Really interested about this as well !

@szpak

This comment has been minimized.

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

This comment has been minimized.

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

This comment has been minimized.

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

This comment has been minimized.

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

This comment has been minimized.

mdhornet90 commented Jun 15, 2016

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

This comment has been minimized.

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--

This comment has been minimized.

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

This comment has been minimized.

aballano commented Oct 25, 2016

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

@szpak

This comment has been minimized.

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

This comment has been minimized.

FloKaemmerer commented Nov 21, 2016

@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

This comment has been minimized.

aballano commented Nov 21, 2016

@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

This comment has been minimized.

FloKaemmerer commented Nov 21, 2016

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

@koral--

This comment has been minimized.

Contributor

koral-- commented Nov 21, 2016

Sorry, I just enabled isssues and created one: koral--#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

This comment has been minimized.

vanniktech commented Dec 27, 2017

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

@vanniktech vanniktech closed this Dec 27, 2017

@szpak

This comment has been minimized.

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

This comment has been minimized.

vanniktech commented Dec 27, 2017

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

@szpak

This comment has been minimized.

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