On Mon, 16 Sep 2024 12:01:41 GMT, Marius Hanl <mh...@openjdk.org> wrote:

>> In this case, keeping the values as instance variables is more reliable. 
>> Since all the tests pass when hashValue and expected are instance variables 
>> and  some of them fail when I  adding parameter to 
>> testScriptTagWithCorrectHashValue , 
>> 
>> it's likely that their assignment happens at the correct time relative to 
>> the @BeforeEach setup. Using parameters may interfere with the test 
>> lifecycle, since hasValue is being used in 
>>     @BeforeEach
>>     public void setup() ....{}
>> 
>>  it's safer and more straightforward to use instance variables.This would 
>> also make it easier to manage the state across @BeforeEach
>
> I think you need to do the same as done by @andy-goryachev-oracle in his 
> JUnit5 replacement PR:
> 
>     public void setup(String hashValue, String expected) throws Exception {
>         htmlFile = new File("subresource-integrity-test.html");
>         ...
>     }
> 
>     @ParameterizedTest
>     @MethodSource("dataProvider")
>     public void testScriptTagWithCorrectHashValue(String hashValue, String 
> expected) {
>         setup(hashValue, expected);
>         ...
>     }
> 
> 
> This way you dont need the instance fields, as they will be empty all the 
> time and never assigned.

@Maran23 is right.  In the absence of support for parameterized class-level 
tests the easiest solution (I think) is to parameterize every `@Test`, which 
means:
- add parameters to each method, replace `@Test` with `@ParameterizedTest` and 
`@MethodSource`
- add parameters to setup method (`@Before`, remove the annotation)
- call the setup method from each test method
- remove the fields that were set in the constructor and the constructor itself

Things might be a bit more complicated in the case of test class hierarchies, 
so additional work and checks will be needed.

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1567#discussion_r1761320750

Reply via email to