From: SourceForge.net <no...@so...> - 2007-10-12 12:06:49
|
Bugs item #1812200, was opened at 2007-10-12 08:06 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Chris Felaco (cfelaco) Assigned to: Nobody/Anonymous (nobody) Summary: BaseTestRunner.getTest() requires class to extend TestCase Initial Comment: In JUnit 3, the method BaseTestRunner.getTest(String) would return a class which implements Test if the class identified by the given name provided a static method named suite(). In JUnit 4, there is an additional requirement that the class extends TestCase. The attached TestCase passes using junit 3.8.1, but fails with junit 4.4. This is at least one of the reasons why Cactus cannot be used with JUnit 4 since the ServletTestCase does not extend TestCase. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 |
From: SourceForge.net <no...@so...> - 2008-08-19 16:59:45
|
Bugs item #1812200, was opened at 2007-10-12 12:06 Message generated for change (Comment added) made by jglick You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Chris Felaco (cfelaco) Assigned to: Nobody/Anonymous (nobody) Summary: BaseTestRunner.getTest() requires class to extend TestCase Initial Comment: In JUnit 3, the method BaseTestRunner.getTest(String) would return a class which implements Test if the class identified by the given name provided a static method named suite(). In JUnit 4, there is an additional requirement that the class extends TestCase. The attached TestCase passes using junit 3.8.1, but fails with junit 4.4. This is at least one of the reasons why Cactus cannot be used with JUnit 4 since the ServletTestCase does not extend TestCase. ---------------------------------------------------------------------- Comment By: Jesse Glick (jglick) Date: 2008-08-19 16:59 Message: Logged In: YES user_id=257383 Originator: NO Confirming that this is a regression between 4.1 and 4.5. Another sample which used to pass and now crashes, demonstrating that JUnit used to accept *any* class with a suite() method (not just implementing Test): import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestResult; import junit.framework.TestSuite; import junit.runner.BaseTestRunner; import junit.textui.TestRunner; public class SampleTest extends TestCase { public SampleTest(String name) { super(name); } public void testStuff() { BaseTestRunner runner = new TestRunner(); TestResult result = new TestResult(); runner.getTest(Suite.class.getName()).run(result); assertFalse(result.failures().hasMoreElements()); } public static class Suite { public static Test suite() { return new TestSuite(RealTest.class); } } public static class RealTest extends TestCase { public RealTest(String name) { super(name); } public void testSomething() { System.err.println("OK."); } } } Patch which seems to fix this problem by ignoring the type of a class with a suite method, as you might expect, while maintaining the requirement that a class extend TestCase if there is no suite method: Index: src/main/java/junit/framework/TestSuite.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/framework/TestSuite.java,v retrieving revision 1.1 diff -u -r1.1 TestSuite.java --- src/main/java/junit/framework/TestSuite.java 7 Dec 2007 15:43:05 -0000 1.1 +++ src/main/java/junit/framework/TestSuite.java 19 Aug 2008 16:55:56 -0000 @@ -168,9 +168,9 @@ /** * Constructs a TestSuite from the given array of classes. - * @param classes {@link TestCase}s + * @param classes extending {@link TestCase} */ - public TestSuite (Class<?>... classes) { + public TestSuite (Class<?/* extends TestCase*/>... classes) { for (Class<?> each : classes) addTest(new TestSuite(each.asSubclass(TestCase.class))); } Index: src/main/java/junit/runner/BaseTestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/runner/BaseTestRunner.java,v retrieving revision 1.1 diff -u -r1.1 BaseTestRunner.java --- src/main/java/junit/runner/BaseTestRunner.java 7 Dec 2007 15:43:03 -0000 1.1 +++ src/main/java/junit/runner/BaseTestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -96,7 +96,7 @@ clearStatus(); return null; } - Class<? extends TestCase> testClass= null; + Class<?> testClass= null; try { testClass= loadSuiteClass(suiteClassName); } catch (ClassNotFoundException e) { @@ -115,7 +115,7 @@ } catch(Exception e) { // try to extract a test suite automatically clearStatus(); - return new TestSuite(testClass); + return new TestSuite(testClass.asSubclass(TestCase.class)); } if (! Modifier.isStatic(suiteMethod.getModifiers())) { runFailed("Suite() method must be static"); @@ -204,8 +204,8 @@ /** * Returns the loaded Class for a suite name. */ - protected Class<? extends TestCase> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { - return Class.forName(suiteClassName).asSubclass(TestCase.class); + protected Class<?> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { + return Class.forName(suiteClassName); } /** Index: src/main/java/junit/textui/TestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/textui/TestRunner.java,v retrieving revision 1.1 diff -u -r1.1 TestRunner.java --- src/main/java/junit/textui/TestRunner.java 7 Dec 2007 15:43:48 -0000 1.1 +++ src/main/java/junit/textui/TestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -184,7 +184,7 @@ } protected TestResult runSingleMethod(String testCase, String method, boolean wait) throws Exception { - Class<? extends TestCase> testClass= loadSuiteClass(testCase); + Class<? extends TestCase> testClass= loadSuiteClass(testCase).asSubclass(TestCase.class); Test test= TestSuite.createTest(testClass, method); return doRun(test, wait); } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 |
From: SourceForge.net <no...@so...> - 2008-08-19 19:58:10
|
Bugs item #1812200, was opened at 2007-10-12 08:06 Message generated for change (Settings changed) made by dsaff You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None >Priority: 9 Private: No Submitted By: Chris Felaco (cfelaco) Assigned to: Nobody/Anonymous (nobody) Summary: BaseTestRunner.getTest() requires class to extend TestCase Initial Comment: In JUnit 3, the method BaseTestRunner.getTest(String) would return a class which implements Test if the class identified by the given name provided a static method named suite(). In JUnit 4, there is an additional requirement that the class extends TestCase. The attached TestCase passes using junit 3.8.1, but fails with junit 4.4. This is at least one of the reasons why Cactus cannot be used with JUnit 4 since the ServletTestCase does not extend TestCase. ---------------------------------------------------------------------- Comment By: Jesse Glick (jglick) Date: 2008-08-19 12:59 Message: Logged In: YES user_id=257383 Originator: NO Confirming that this is a regression between 4.1 and 4.5. Another sample which used to pass and now crashes, demonstrating that JUnit used to accept *any* class with a suite() method (not just implementing Test): import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestResult; import junit.framework.TestSuite; import junit.runner.BaseTestRunner; import junit.textui.TestRunner; public class SampleTest extends TestCase { public SampleTest(String name) { super(name); } public void testStuff() { BaseTestRunner runner = new TestRunner(); TestResult result = new TestResult(); runner.getTest(Suite.class.getName()).run(result); assertFalse(result.failures().hasMoreElements()); } public static class Suite { public static Test suite() { return new TestSuite(RealTest.class); } } public static class RealTest extends TestCase { public RealTest(String name) { super(name); } public void testSomething() { System.err.println("OK."); } } } Patch which seems to fix this problem by ignoring the type of a class with a suite method, as you might expect, while maintaining the requirement that a class extend TestCase if there is no suite method: Index: src/main/java/junit/framework/TestSuite.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/framework/TestSuite.java,v retrieving revision 1.1 diff -u -r1.1 TestSuite.java --- src/main/java/junit/framework/TestSuite.java 7 Dec 2007 15:43:05 -0000 1.1 +++ src/main/java/junit/framework/TestSuite.java 19 Aug 2008 16:55:56 -0000 @@ -168,9 +168,9 @@ /** * Constructs a TestSuite from the given array of classes. - * @param classes {@link TestCase}s + * @param classes extending {@link TestCase} */ - public TestSuite (Class<?>... classes) { + public TestSuite (Class<?/* extends TestCase*/>... classes) { for (Class<?> each : classes) addTest(new TestSuite(each.asSubclass(TestCase.class))); } Index: src/main/java/junit/runner/BaseTestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/runner/BaseTestRunner.java,v retrieving revision 1.1 diff -u -r1.1 BaseTestRunner.java --- src/main/java/junit/runner/BaseTestRunner.java 7 Dec 2007 15:43:03 -0000 1.1 +++ src/main/java/junit/runner/BaseTestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -96,7 +96,7 @@ clearStatus(); return null; } - Class<? extends TestCase> testClass= null; + Class<?> testClass= null; try { testClass= loadSuiteClass(suiteClassName); } catch (ClassNotFoundException e) { @@ -115,7 +115,7 @@ } catch(Exception e) { // try to extract a test suite automatically clearStatus(); - return new TestSuite(testClass); + return new TestSuite(testClass.asSubclass(TestCase.class)); } if (! Modifier.isStatic(suiteMethod.getModifiers())) { runFailed("Suite() method must be static"); @@ -204,8 +204,8 @@ /** * Returns the loaded Class for a suite name. */ - protected Class<? extends TestCase> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { - return Class.forName(suiteClassName).asSubclass(TestCase.class); + protected Class<?> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { + return Class.forName(suiteClassName); } /** Index: src/main/java/junit/textui/TestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/textui/TestRunner.java,v retrieving revision 1.1 diff -u -r1.1 TestRunner.java --- src/main/java/junit/textui/TestRunner.java 7 Dec 2007 15:43:48 -0000 1.1 +++ src/main/java/junit/textui/TestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -184,7 +184,7 @@ } protected TestResult runSingleMethod(String testCase, String method, boolean wait) throws Exception { - Class<? extends TestCase> testClass= loadSuiteClass(testCase); + Class<? extends TestCase> testClass= loadSuiteClass(testCase).asSubclass(TestCase.class); Test test= TestSuite.createTest(testClass, method); return doRun(test, wait); } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 |
From: SourceForge.net <no...@so...> - 2008-10-22 13:38:28
|
Bugs item #1812200, was opened at 2007-10-12 08:06 Message generated for change (Settings changed) made by dsaff You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None >Priority: 5 Private: No Submitted By: Chris Felaco (cfelaco) Assigned to: Nobody/Anonymous (nobody) Summary: BaseTestRunner.getTest() requires class to extend TestCase Initial Comment: In JUnit 3, the method BaseTestRunner.getTest(String) would return a class which implements Test if the class identified by the given name provided a static method named suite(). In JUnit 4, there is an additional requirement that the class extends TestCase. The attached TestCase passes using junit 3.8.1, but fails with junit 4.4. This is at least one of the reasons why Cactus cannot be used with JUnit 4 since the ServletTestCase does not extend TestCase. ---------------------------------------------------------------------- Comment By: Jesse Glick (jglick) Date: 2008-08-19 12:59 Message: Logged In: YES user_id=257383 Originator: NO Confirming that this is a regression between 4.1 and 4.5. Another sample which used to pass and now crashes, demonstrating that JUnit used to accept *any* class with a suite() method (not just implementing Test): import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestResult; import junit.framework.TestSuite; import junit.runner.BaseTestRunner; import junit.textui.TestRunner; public class SampleTest extends TestCase { public SampleTest(String name) { super(name); } public void testStuff() { BaseTestRunner runner = new TestRunner(); TestResult result = new TestResult(); runner.getTest(Suite.class.getName()).run(result); assertFalse(result.failures().hasMoreElements()); } public static class Suite { public static Test suite() { return new TestSuite(RealTest.class); } } public static class RealTest extends TestCase { public RealTest(String name) { super(name); } public void testSomething() { System.err.println("OK."); } } } Patch which seems to fix this problem by ignoring the type of a class with a suite method, as you might expect, while maintaining the requirement that a class extend TestCase if there is no suite method: Index: src/main/java/junit/framework/TestSuite.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/framework/TestSuite.java,v retrieving revision 1.1 diff -u -r1.1 TestSuite.java --- src/main/java/junit/framework/TestSuite.java 7 Dec 2007 15:43:05 -0000 1.1 +++ src/main/java/junit/framework/TestSuite.java 19 Aug 2008 16:55:56 -0000 @@ -168,9 +168,9 @@ /** * Constructs a TestSuite from the given array of classes. - * @param classes {@link TestCase}s + * @param classes extending {@link TestCase} */ - public TestSuite (Class<?>... classes) { + public TestSuite (Class<?/* extends TestCase*/>... classes) { for (Class<?> each : classes) addTest(new TestSuite(each.asSubclass(TestCase.class))); } Index: src/main/java/junit/runner/BaseTestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/runner/BaseTestRunner.java,v retrieving revision 1.1 diff -u -r1.1 BaseTestRunner.java --- src/main/java/junit/runner/BaseTestRunner.java 7 Dec 2007 15:43:03 -0000 1.1 +++ src/main/java/junit/runner/BaseTestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -96,7 +96,7 @@ clearStatus(); return null; } - Class<? extends TestCase> testClass= null; + Class<?> testClass= null; try { testClass= loadSuiteClass(suiteClassName); } catch (ClassNotFoundException e) { @@ -115,7 +115,7 @@ } catch(Exception e) { // try to extract a test suite automatically clearStatus(); - return new TestSuite(testClass); + return new TestSuite(testClass.asSubclass(TestCase.class)); } if (! Modifier.isStatic(suiteMethod.getModifiers())) { runFailed("Suite() method must be static"); @@ -204,8 +204,8 @@ /** * Returns the loaded Class for a suite name. */ - protected Class<? extends TestCase> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { - return Class.forName(suiteClassName).asSubclass(TestCase.class); + protected Class<?> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { + return Class.forName(suiteClassName); } /** Index: src/main/java/junit/textui/TestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/textui/TestRunner.java,v retrieving revision 1.1 diff -u -r1.1 TestRunner.java --- src/main/java/junit/textui/TestRunner.java 7 Dec 2007 15:43:48 -0000 1.1 +++ src/main/java/junit/textui/TestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -184,7 +184,7 @@ } protected TestResult runSingleMethod(String testCase, String method, boolean wait) throws Exception { - Class<? extends TestCase> testClass= loadSuiteClass(testCase); + Class<? extends TestCase> testClass= loadSuiteClass(testCase).asSubclass(TestCase.class); Test test= TestSuite.createTest(testClass, method); return doRun(test, wait); } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 |
From: SourceForge.net <no...@so...> - 2009-04-20 18:08:53
|
Bugs item #1812200, was opened at 2007-10-12 08:06 Message generated for change (Comment added) made by dsaff You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None >Status: Closed >Resolution: Fixed Priority: 5 Private: No Submitted By: Chris Felaco (cfelaco) Assigned to: Nobody/Anonymous (nobody) Summary: BaseTestRunner.getTest() requires class to extend TestCase Initial Comment: In JUnit 3, the method BaseTestRunner.getTest(String) would return a class which implements Test if the class identified by the given name provided a static method named suite(). In JUnit 4, there is an additional requirement that the class extends TestCase. The attached TestCase passes using junit 3.8.1, but fails with junit 4.4. This is at least one of the reasons why Cactus cannot be used with JUnit 4 since the ServletTestCase does not extend TestCase. ---------------------------------------------------------------------- >Comment By: David Saff (dsaff) Date: 2009-04-20 14:08 Message: Thanks! Fixed. ---------------------------------------------------------------------- Comment By: Jesse Glick (jglick) Date: 2008-08-19 12:59 Message: Logged In: YES user_id=257383 Originator: NO Confirming that this is a regression between 4.1 and 4.5. Another sample which used to pass and now crashes, demonstrating that JUnit used to accept *any* class with a suite() method (not just implementing Test): import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestResult; import junit.framework.TestSuite; import junit.runner.BaseTestRunner; import junit.textui.TestRunner; public class SampleTest extends TestCase { public SampleTest(String name) { super(name); } public void testStuff() { BaseTestRunner runner = new TestRunner(); TestResult result = new TestResult(); runner.getTest(Suite.class.getName()).run(result); assertFalse(result.failures().hasMoreElements()); } public static class Suite { public static Test suite() { return new TestSuite(RealTest.class); } } public static class RealTest extends TestCase { public RealTest(String name) { super(name); } public void testSomething() { System.err.println("OK."); } } } Patch which seems to fix this problem by ignoring the type of a class with a suite method, as you might expect, while maintaining the requirement that a class extend TestCase if there is no suite method: Index: src/main/java/junit/framework/TestSuite.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/framework/TestSuite.java,v retrieving revision 1.1 diff -u -r1.1 TestSuite.java --- src/main/java/junit/framework/TestSuite.java 7 Dec 2007 15:43:05 -0000 1.1 +++ src/main/java/junit/framework/TestSuite.java 19 Aug 2008 16:55:56 -0000 @@ -168,9 +168,9 @@ /** * Constructs a TestSuite from the given array of classes. - * @param classes {@link TestCase}s + * @param classes extending {@link TestCase} */ - public TestSuite (Class<?>... classes) { + public TestSuite (Class<?/* extends TestCase*/>... classes) { for (Class<?> each : classes) addTest(new TestSuite(each.asSubclass(TestCase.class))); } Index: src/main/java/junit/runner/BaseTestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/runner/BaseTestRunner.java,v retrieving revision 1.1 diff -u -r1.1 BaseTestRunner.java --- src/main/java/junit/runner/BaseTestRunner.java 7 Dec 2007 15:43:03 -0000 1.1 +++ src/main/java/junit/runner/BaseTestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -96,7 +96,7 @@ clearStatus(); return null; } - Class<? extends TestCase> testClass= null; + Class<?> testClass= null; try { testClass= loadSuiteClass(suiteClassName); } catch (ClassNotFoundException e) { @@ -115,7 +115,7 @@ } catch(Exception e) { // try to extract a test suite automatically clearStatus(); - return new TestSuite(testClass); + return new TestSuite(testClass.asSubclass(TestCase.class)); } if (! Modifier.isStatic(suiteMethod.getModifiers())) { runFailed("Suite() method must be static"); @@ -204,8 +204,8 @@ /** * Returns the loaded Class for a suite name. */ - protected Class<? extends TestCase> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { - return Class.forName(suiteClassName).asSubclass(TestCase.class); + protected Class<?> loadSuiteClass(String suiteClassName) throws ClassNotFoundException { + return Class.forName(suiteClassName); } /** Index: src/main/java/junit/textui/TestRunner.java =================================================================== RCS file: /cvsroot/junit/junit/src/main/java/junit/textui/TestRunner.java,v retrieving revision 1.1 diff -u -r1.1 TestRunner.java --- src/main/java/junit/textui/TestRunner.java 7 Dec 2007 15:43:48 -0000 1.1 +++ src/main/java/junit/textui/TestRunner.java 19 Aug 2008 16:55:56 -0000 @@ -184,7 +184,7 @@ } protected TestResult runSingleMethod(String testCase, String method, boolean wait) throws Exception { - Class<? extends TestCase> testClass= loadSuiteClass(testCase); + Class<? extends TestCase> testClass= loadSuiteClass(testCase).asSubclass(TestCase.class); Test test= TestSuite.createTest(testClass, method); return doRun(test, wait); } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=115278&aid=1812200&group_id=15278 |