An Android library for generating simple A/B tests
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
ab-annotations
ab-compiler
ab-lib
app
gradle/wrapper
.gitignore
CONTRIBUTING.md
ISSUE_TEMPLATE.md
LICENSE.txt
README.md
build.gradle
circle.yml
gradle.properties
gradlew
gradlew.bat
settings.gradle

README.md

An A/B Testing Library for Android...

...that makes writing simple tests simpler by using annotations.

Android Arsenal

How it works

Currently you can use two different annotations: @TextTest and @ResourceTest. @TextTest is for plugging Strings into a generated test; @ResourceTest is for plugging resource IDs. Example usage may be as follows:

@TextTest(testName="firstTest", method="setText", values={"hello", "howdy"})
TextView helloTextView;

which will automatically generate a class which you can run by calling ABTester.with(activity).run("firstTest");. Or, if you're running the test from outside of an Activity, ABTester.with() can also take a second Object parameter where you've put in the annotations.

You can also cover multiple fields in the same test, as follows:

@TextTest(testName="firstTest", method="setText", values={"hello", "howdy"})
TextView helloTextView;

@ResourceTest(testName="firstTest", method="setText", values={R.string.yo, R.string.sup})
TextView otherTextView;

@TextTest(testName="firstTest", method="setText", values={"world", "globe"})
TextView thirdTextView;

And that will generate a class which will create two tests that will cover those three TextViews.

There's also a CustomTest class which allows you to define more complex tests that may not be possible to generate with the annotation processor.

By default, tests will be weighted to have an equal chance to be selected. However, by extending the TestPicker class you can weight the tests however you like.

To obtain...

You'll want to include

maven { url "https://jitpack.io" }

in either your allprojects.repositories or your module's repositories section. Whatever you like!

You will also need the APT plugin, so you will want to put this into your root build.gradle's buildscript.dependencies:

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

and apply this plugin to the modules you're doing your tests in:

apply plugin: 'com.neenbedankt.android-apt'

Then, you'll want to bang these bad boys into your build.gradles' dependencies:

apt 'com.github.imperial-crystalline-recursion.abtestgen:ab-compiler:0.4.1'
compile 'com.github.imperial-crystalline-recursion.abtestgen:ab-annotations:0.4.1'
compile 'com.github.imperial-crystalline-recursion.abtestgen:ab-lib:0.4.1'