Skip to content

Extracted duplicated stubbings in HttpClientDefaultTest into 2 helpers - #259

Open
mia-li-001 wants to merge 1 commit into
davidmoten:masterfrom
mia-li-001:refactor-duplicated-stubbings-1
Open

mia-li-001 wants to merge 1 commit into
davidmoten:masterfrom
mia-li-001:refactor-duplicated-stubbings-1

Conversation

@mia-li-001

Copy link
Copy Markdown

I am a researcher at the university. In my analysis of the project, I observed that

In the test class HttpClientDefaultTest, 2 groups of stubbings are repeated across tests:

  1. The tests testGetInputStreamThrows and testDisconnectThrows define the same stubbings:
    • when(connection.getOutputStream()).thenReturn(new ByteArrayOutputStream())
    • when(connection.getResponseCode()).thenReturn(getResponseCodeReturnValue)
  2. The tests testGetInputStreamReturnsNull, testIsOKWhenNotOk and testIsOKWhenNotOkStatusCodeLessThan200 define the same stubbings:
    • when(connection.getOutputStream()).thenReturn(new ByteArrayOutputStream())
    • when(connection.getResponseCode()).thenReturn(getResponseCodeReturnValue)
    • when(connection.getInputStream()).thenReturn(null)

Here connection and getResponseCodeReturnValue stand for the values that differ from test to test.

These duplicated stubbings repeat the setup in each test, so a change to that setup has to be made in 2 and 3 places respectively. I propose extracting them into 2 private helper methods:

  • setupHttpURLConnectionGetResponseCodeAndGetOutputStreamStubs, which takes 2 parameters (connection and getResponseCodeReturnValue) and is called from 2 tests and is also called by setupHttpURLConnectionGetResponseCodeAndGetInputStreamAnd1MoreStubs.
  • setupHttpURLConnectionGetResponseCodeAndGetInputStreamAnd1MoreStubs, which takes 2 parameters (connection and getResponseCodeReturnValue) and adds its own stubbings to those of setupHttpURLConnectionGetResponseCodeAndGetOutputStreamStubs and is called from 3 tests.

This refactoring also reduces the cognitive complexity of HttpClientDefaultTest by 22.5% (from 87.3 to 67.7, measured with Genese). Cognitive complexity, introduced by SonarSource, estimates how hard code is for a human to understand.

The change only moves the existing stubbings into the helpers. The stubbed calls, arguments and returned values are the same as before, and the test results are unchanged.

I propose a solution below to remove the duplicated stubbings. Happy to modify the pull request based on your feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant