microsoft / kiota-java

Java libraries for Kiota-generated API clients.
https://aka.ms/kiota/docs
MIT License
24 stars 26 forks source link

Refactor to Eliminate Repetitive Mock Object Creation in RequestInformationTest (Issue #1374) #1375

Closed gzhao9 closed 3 months ago

gzhao9 commented 3 months ago

Pull Request Title:

Refactor RequestInformationTest to Reduce Redundancy and Simplify Mock Creation

Pull Request Description:

This pull request addresses issue #1374 by refactoring the RequestInformationTest class to eliminate redundant mock creations and simplify the testing code. Specifically, it introduces helper methods to centralize the creation and configuration of mocks for RequestAdapter and SerializationWriterFactory, reducing code duplication and enhancing readability.

Changes:

Added Methods:

Here's the original issue:


Hi there!

While working with theRequestInformationTest class. I've noticed that there are 2 mock variables repeatedly created across various tests. To simplify the code, I propose a small refactor to eliminate these redundancies, which could reduce the code by 20 lines.

  1. Mock RequestAdapter Creation: Repeated 5 times.
  2. Mock SerializationWriterFactory Creation: Repeated 5 times.

For instance, the mock creation logic is as follows:

final SerializationWriterFactory factoryMock = mock(SerializationWriterFactory.class);
when(factoryMock.getSerializationWriter(anyString())).thenReturn(writerMock);
final RequestAdapter requestAdapterMock = mock(RequestAdapter.class);
when(requestAdapterMock.getSerializationWriterFactory()).thenReturn(factoryMock);

To eliminate redundancy, We can create two methods that can be called repeatedly, createMockSerializationWriterFactory and createMockRequestAdapter:

public final SerializationWriterFactory createMockSerializationWriterFactory(SerializationWriter writer){
    final SerializationWriterFactory factoryMock = mock(SerializationWriterFactory.class);
    when(factoryMock.getSerializationWriter(anyString())).thenReturn(writer);
    return  factoryMock;
}
public final RequestAdapter createMockRequestAdapter(SerializationWriterFactory factory){
    final RequestAdapter requestAdapterMock = mock(RequestAdapter.class);
    when(requestAdapterMock.getSerializationWriterFactory()).thenReturn(factory);
    return  requestAdapterMock;
}

Using these methods, the refactored code becomes much cleaner:

final SerializationWriterFactory factoryMock = createMockSerializationWriterFactory(writer);
final RequestAdapter requestAdapterMock = createMockRequestAdapter(factoryMock );

And for further improvement, we can overload createMockRequestAdapter for a more streamlined approach:

public final RequestAdapter createMockRequestAdapter(SerializationWriter writer){
    return  createMockRequestAdapter(createMockSerializationWriterFactory(writer));
}

With this refactoring, mock creation and configuration can be done in a single line:

final RequestAdapter requestAdapterMock = createMockRequestAdapter(writerMock);
gzhao9 commented 3 months ago

@microsoft-github-policy-service agree