From: SourceForge.net <no...@so...> - 2009-11-16 17:52:53
|
Feature Requests item #1626414, was opened at 2007-01-02 14:48 Message generated for change (Settings changed) made by dsaff You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=365278&aid=1626414&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: Pending Resolution: None Priority: 5 Private: No Submitted By: Russ Jackson (arjackson) Assigned to: Nobody/Anonymous (nobody) Summary: Parameterize Test Methods Initial Comment: I see that the JUnit 4 @Parameters annotation works in conjunction with a parameterized test class constructor via an intermediary data method and test class members. Would it be possible to have it annotate (and parameterize) the test method instead? I believe the correlation between the test data and the test method would be much tighter, it would provide greater flexibility, and data could be injected into individual methods rather than the test class as a whole (which would allow for multiple, non-conflicting @Parameters annotations per test class). Here is a partial declaration of a revised Parameters annotation: @Interface Parameters { public Object[][] data(); } And here would be some examples of usage (please notice that the result param is the first param, rather than the last, to follow the structure of a varargs method declaration): @Test @Parameters(data = new Object[][] { {14, 1, 2, 3, 4, 4}, {0, 100, -100} } ) public void testIntegerAddition(int result, int... addends) { AssertEquals(result, MyMath.add(addends)); ... or @Test @Parameters(data = new Object[][] { {8, 64}, {ImaginaryNumberException, -64} } ) public void testSquareRoot(Object result, int value) { if (result instanceof ImaginaryNumberException) { try { MyMath.squareRoot(value); fail("Expected ImaginaryNumberException"); } catch(ImaginaryNumberException ine){ // OK - as expected } } else { AssertEquals((Integer)result, MyMath.squareRoot(value)); } Or, you could simply hang the test data on the @Test annotation, as so: @Interface Test { public Object[][] testData(); } And the usage would be: @Test(testData = new Object[][] { {8, 64}, {ImaginaryNumberException, -64} } ) public void testSquareRoot(Object result, int value) { ... Thanks. Russ ---------------------------------------------------------------------- Comment By: David Saff (dsaff) Date: 2009-11-16 12:52 Message: This tracker is being shut down. Please move this item to http://github.com/KentBeck/junit/issues ---------------------------------------------------------------------- Comment By: Alex (toalexsmail) Date: 2008-03-13 09:27 Message: Logged In: YES user_id=2034775 Originator: NO Hi Jonhnny ! I have looked on your sample, its look great. I will look on implementation details later. I have small question. Are you using @ParametersSource with method name that returns parameters for backward compatibility only? It would be nice that you could actually write parameters in annotation itself. But it can break backward compatibility. ---------------------------------------------------------------------- Comment By: Jonhnny Weslley (jweslley) Date: 2008-03-13 08:42 Message: Logged In: YES user_id=1627927 Originator: NO Hi Alex, I have an implementation in this feature request: https://sourceforge.net/tracker/?func=detail&atid=365278&aid=1674180&group_id=15278 However it was implemented junit-4.3.1. I can to update (if necessary) and post it here. What do you think about this? ---------------------------------------------------------------------- Comment By: Alex (toalexsmail) Date: 2008-03-12 17:24 Message: Logged In: YES user_id=2034775 Originator: NO I think it is great idea. I have currently no time, but I will look forward to implement this. ---------------------------------------------------------------------- Comment By: Jonhnny Weslley (jweslley) Date: 2007-02-28 12:04 Message: Logged In: YES user_id=1627927 Originator: NO Only primitive types, String, Class, annoatation, enumeration are permitted or 1-dimensional arrays. ---------------------------------------------------------------------- Comment By: Russ Jackson (arjackson) Date: 2007-01-02 15:16 Message: Logged In: YES user_id=1680949 Originator: YES Please revise the example @Test annotation as so: public @Interface Test { public Object[][] testData() default null; } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=365278&aid=1626414&group_id=15278 |