A really nasty workaround is to override the getName method on the
test class:

    @Override
    public String getName()
    {
        for (StackTraceElement stackElement :
Thread.currentThread().getStackTrace())
        {
            if
(stackElement.getClassName().equals("android.test.InstrumentationTestRunner
$WatcherResultPrinter"))
            {
                if (stackElement.getMethodName().equals("startTest"))
                {
                    return "bugFix";
                }
            }
        }
        return super.getName();
    }

and to declare a method called "bugFix" in the class. This allows the
test to run but the test names in eclipse all come up as bugfix.

On Apr 28, 11:07 am, alan <a...@birtles.org.uk> wrote:
> When defining a junit test using the static suite method android
> assumes that the name of each test is also the name of a method. If
> this is not the case then the test runner fails to run. The following
> test class works correctly using the standard eclipse junit runner:
>
> public class CustomTest extends TestCase
> {
>
>     public CustomTest(String testName)
>     {
>         super(testName);
>     }
>
>     @Override
>     protected void runTest() throws Throwable
>     {
>         Assert.fail("Test failed");
>     }
>
>     public static Test suite()
>     {
>         TestSuite suite = new TestSuite();
>         suite.addTest(new CustomTest("test1"));
>         return suite;
>     }
>
> }
>
> however running using the android test runner says that test1 passes!
> I have managed to trace this down to the following code in
> InstrumentationTestRunner:
>             try {
>                 // Look for TimedTest annotation on both test class
> and test method
>                 if
> (test.getClass().getMethod(testName).isAnnotationPresent(TimedTest.class))
> {
>                     mIsTimedTest = true;
>                     mIncludeDetailedStats =
> test.getClass().getMethod(testName).getAnnotation(
>                             TimedTest.class).includeDetailedStats();
>                 } else if
> (test.getClass().isAnnotationPresent(TimedTest.class)) {
>                     mIsTimedTest = true;
>                     mIncludeDetailedStats =
> test.getClass().getAnnotation(
>                             TimedTest.class).includeDetailedStats();
>                 }
>             } catch (SecurityException e) {
>                 throw new IllegalStateException(e);
>             } catch (NoSuchMethodException e) {
>                 throw new IllegalStateException(e);
>             }
> The thrown IllegalStateException doesn't seem to be caught or reported
> anywhere which is I think why the eclipse plugin incorrectly reports
> the tests have passed. As this code is called before the test is run
> the test code is never called.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscr...@googlegroups.com
> For more options, visit this group 
> athttp://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to