Add test runner log when test case class is not loaded.

The test runner will only load TestCase classes that have a public
constructor with either no params or a single String parameter.

This is fairly subtle behavior and can be difficult to catch. This change
adds a log message when a TestCase class is not loaded, and adds some
associated unit tests.

Change-Id: I6fc63e4179c949620f5773e0ae134f99905a6fb2
This commit is contained in:
Brett Chabot
2010-04-23 16:22:09 -07:00
parent a2c980d30f
commit bb469fe3da
5 changed files with 150 additions and 1 deletions

View File

@ -46,6 +46,8 @@ import java.util.TreeSet;
*/
public class TestGrouping {
private static final String LOG_TAG = "TestGrouping";
SortedSet<Class<? extends TestCase>> testCaseClasses;
public static final Comparator<Class<? extends TestCase>> SORT_BY_SIMPLE_NAME
@ -114,7 +116,7 @@ public class TestGrouping {
for (String packageName : packageNames) {
List<Class<? extends TestCase>> addedClasses = testCaseClassesInPackage(packageName);
if (addedClasses.isEmpty()) {
Log.w("TestGrouping", "Invalid Package: '" + packageName
Log.w(LOG_TAG, "Invalid Package: '" + packageName
+ "' could not be found or has no tests");
}
testCaseClasses.addAll(addedClasses);
@ -234,6 +236,10 @@ public class TestGrouping {
}
}
}
Log.i(LOG_TAG, String.format(
"TestCase class %s is missing a public constructor with no parameters " +
"or a single String parameter - skipping",
aClass.getName()));
return false;
}
}

View File

@ -0,0 +1,47 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.test.suitebuilder;
import java.util.List;
import junit.framework.TestCase;
/**
* Unit tests for {@link TestGrouping}
*/
public class TestGroupingTest extends TestCase {
private TestGrouping mGrouping;
@Override
protected void setUp() throws Exception {
super.setUp();
mGrouping = new TestGrouping(TestGrouping.SORT_BY_SIMPLE_NAME);
}
/**
* Verifies that TestCases with no public constructor are not loaded.
* Relies on fixture classes in android.test.suitebuilder.examples.constructor
*/
public void testGetTests_noPublicConstructor() {
mGrouping.addPackagesRecursive("android.test.suitebuilder.examples.constructor");
List<TestMethod> tests = mGrouping.getTests();
// only the PublicConstructorTest's test method should be present
assertEquals(1, tests.size());
assertEquals("testPublicConstructor", tests.get(0).getName());
}
}

View File

@ -0,0 +1,35 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.test.suitebuilder.examples.constructor;
import junit.framework.TestCase;
/**
* A {@link TestCase} which should not be loaded since it has non-public constructors with no args.
*/
public class NoPublicConstructorTest extends TestCase {
NoPublicConstructorTest() {
}
public NoPublicConstructorTest(String foo, String foo2) {
}
public void testNotRun() {
fail("method in NoPublicConstructorTest run unexpectedly");
}
}

View File

@ -0,0 +1,33 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.test.suitebuilder.examples.constructor;
import junit.framework.TestCase;
/**
* A protected constructor test case that should not be loaded.
*/
public class ProtectedConstructorTest extends TestCase {
protected ProtectedConstructorTest() {
}
public void testNotRun() {
fail("method in ProtectedConstructorTest run unexpectedly");
}
}

View File

@ -0,0 +1,28 @@
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.test.suitebuilder.examples.constructor;
import junit.framework.TestCase;
/**
* A public constructor test case that should be loaded.
*/
public class PublicConstructorTest extends TestCase {
public void testPublicConstructor() {
}
}