Test style questions
Kevin Rushforth
kevin.rushforth at oracle.com
Tue Jun 16 14:14:09 UTC 2020
1. It's a judgment call. I tend to like fairly fine-grained tests as
long as they are (at least mostly) independent. If the test is "do A",
"verify state", "do B", "verify state" and B is something that you need
to do after A, then having them in the same test is better.
2. It depends. If the additional tests are related to the area you are
fixing and you are worried that the missing tests could lead to bugs if
additional changes were made in the area you are fixing, then I think
it's fine to add the new tests. If it's just a case where the test
coverage is poor, it might make sense for a follow-on test bug to add
new tests.
I know that this isn't a definitive answer, but hopefully it will
provide some general guidance.
-- Kevin
On 6/15/2020 10:21 PM, Robert Lichtenberger wrote:
> While discussing my Pull Request ([1]) for JDK-8176270 ([2]) with Jeanette
> Winzenburg I came across two questions that I would like to ask the
> community regarding test cases:
>
> 1) How fine-grained to we want tests to be? Is it ok to test two (somewhat
> similiar) things at once or should a separate test case be written? e.g.
> this test case of mine:
> @Test public void replaceSelectionAtEndWithListener() {
> StringBuilder selectedTextLog = new StringBuilder();
> StringBuilder selectionLog = new StringBuilder();
> textInput.setText("x xxx");
> textInput.selectRange(2, 5);
> textInput.selectedTextProperty().addListener((__, ___, selection)
> -> selectedTextLog.append("|" + selection));
> textInput.selectionProperty().addListener((__, ___, selection) ->
> selectionLog.append("|" + selection.getStart() + "," + selection.getEnd()));
> textInput.replaceSelection("a");
> assertEquals("|", selectedTextLog.toString());
> assertEquals("|3,3", selectionLog.toString());
> assertEquals("x a", textInput.getText());
> }
> Will test the selectedTextProperty AND the selectionProperty at the same
> time. Is this acceptable/desireable or should the test case be split into
> two separate tests?
>
> 2) When fixing bugs, is it ok to not only provide a test case that will
> fail before the fix and run successfully after the fix but also provide
> additional test cases with the intention of preventing regressions? Ideally
> of course such tests should already exist but what if they are not.
> In my case I wanted to add a test case to "prove" that redo() will work in
> the presence of a shortened text and I would also like to have a general
> test case about selection properties and text property. What's the general
> rule here?
>
> Best regards,
> Robert
>
> [1] https://github.com/openjdk/jfx/pull/138
> [2] https://bugs.openjdk.java.net/browse/JDK-8176270
More information about the openjfx-dev
mailing list