DATAGEODE-306 - Adapt to non-lenient, strict stubbing for mock introduced in Mockito 3.3.0.

This commit is contained in:
John Blum
2020-03-10 22:58:29 -07:00
parent 3824effc84
commit 9a00c38d0a
3 changed files with 73 additions and 47 deletions

View File

@@ -44,7 +44,7 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor {
* @see org.springframework.expression.PropertyAccessor#canRead(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String)
*/
@Override
public boolean canRead(EvaluationContext context, Object target, String name) {
public boolean canRead(EvaluationContext evaluationContext, Object target, String name) {
return ((PdxReader) target).hasField(name);
}
@@ -53,9 +53,11 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor {
* @see org.springframework.expression.PropertyAccessor#read(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String)
*/
@Override
public TypedValue read(EvaluationContext context, Object target, String name) {
public TypedValue read(EvaluationContext evaluationContext, Object target, String name) {
Object object = ((PdxReader) target).readObject(name);
return object == null ? TypedValue.NULL : new TypedValue(object);
return object != null ? new TypedValue(object) : TypedValue.NULL;
}
/*
@@ -63,7 +65,7 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor {
* @see org.springframework.expression.PropertyAccessor#canWrite(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String)
*/
@Override
public boolean canWrite(EvaluationContext context, Object target, String name) {
public boolean canWrite(EvaluationContext evaluationContext, Object target, String name) {
return false;
}
@@ -72,7 +74,7 @@ enum PdxReaderPropertyAccessor implements PropertyAccessor {
* @see org.springframework.expression.PropertyAccessor#write(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String, java.lang.Object)
*/
@Override
public void write(EvaluationContext context, Object target, String name, Object newValue) {
public void write(EvaluationContext evaluationContext, Object target, String name, Object newValue) {
throw new UnsupportedOperationException();
}
}

View File

@@ -15,72 +15,95 @@
*/
package org.springframework.data.gemfire.mapping;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.List;
import org.apache.geode.pdx.PdxReader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.apache.geode.pdx.PdxReader;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.TypedValue;
/**
* Unit Tests for {@link PdxReaderPropertyAccessor}.
*
* @author Oliver Gierke
* @author John Blum
* @see org.junit.Test
* @see org.mockito.Mock
* @see org.mockito.Mockito
* @see org.mockito.junit.MockitoJUnitRunner
* @see org.springframework.data.gemfire.mapping.PdxReaderPropertyAccessor
*/
@RunWith(MockitoJUnitRunner.class)
public class PdxReaderPropertyAccessorUnitTests {
@Mock
PdxReader reader;
private EvaluationContext mockEvaluationContext;
@Mock
private PdxReader mockReader;
@Test
public void appliesToPdxReadersOnly() {
List<Class<?>> classes = Arrays.asList(PdxReaderPropertyAccessor.INSTANCE.getSpecificTargetClasses());
assertThat(classes, hasItem(PdxReader.class));
assertThat(classes).contains(PdxReader.class);
}
@Test
public void canReadPropertyIfReaderHasField() {
when(reader.hasField("key")).thenReturn(true);
assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(null, reader, "key"), is(true));
when(this.mockReader.hasField("key")).thenReturn(true);
when(reader.hasField("key")).thenReturn(false);
assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(null, reader, "key"), is(false));
assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(this.mockEvaluationContext, this.mockReader, "key"))
.isTrue();
}
@Test
public void cannotReadPropertyWhenReaderDoesNotHaveField() {
when(this.mockReader.hasField("key")).thenReturn(false);
assertThat(PdxReaderPropertyAccessor.INSTANCE.canRead(this.mockEvaluationContext, this.mockReader, "key"))
.isFalse();
}
@Test
public void returnsTypedNullIfNullIsReadFromReader() {
when(reader.readObject("key")).thenReturn(null);
assertThat(PdxReaderPropertyAccessor.INSTANCE.read(null, reader, "key"), is(TypedValue.NULL));
when(this.mockReader.readObject("key")).thenReturn(null);
assertThat(PdxReaderPropertyAccessor.INSTANCE.read(this.mockEvaluationContext, this.mockReader, "key"))
.isEqualTo(TypedValue.NULL);
}
@Test
public void returnsTypeValueWithValueReadFromReader() {
when(reader.readObject("key")).thenReturn("String");
when(this.mockReader.readObject("key")).thenReturn("String");
TypedValue result = PdxReaderPropertyAccessor.INSTANCE.read(null, reader, "key");
TypedValue result = PdxReaderPropertyAccessor.INSTANCE.read(this.mockEvaluationContext, this.mockReader, "key");
assertThat(result.getTypeDescriptor(), is(TypeDescriptor.valueOf(String.class)));
assertThat(result.getValue(), is((Object) "String"));
assertThat(result.getTypeDescriptor()).isEqualTo(TypeDescriptor.valueOf(String.class));
assertThat(result.getValue()).isEqualTo("String");
}
@SuppressWarnings("all")
@Test(expected = UnsupportedOperationException.class)
public void doesNotSupportWrites() {
assertThat(PdxReaderPropertyAccessor.INSTANCE.canWrite(null, null, null), is(false));
PdxReaderPropertyAccessor.INSTANCE.write(null, null, null, reader);
assertThat(PdxReaderPropertyAccessor.INSTANCE.canWrite(this.mockEvaluationContext, null, null)).isFalse();
PdxReaderPropertyAccessor.INSTANCE.write(this.mockEvaluationContext, null, null, this.mockReader);
}
}

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.repository.support;
import static org.assertj.core.api.Assertions.assertThat;
@@ -22,8 +21,8 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import static org.springframework.data.gemfire.util.RuntimeExceptionFactory.newUnsupportedOperationException;
@@ -31,15 +30,15 @@ import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.RegionAttributes;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.RegionAttributes;
import org.springframework.aop.framework.Advised;
import org.springframework.data.gemfire.GemfireTemplate;
import org.springframework.data.gemfire.mapping.GemfireMappingContext;
@@ -53,11 +52,12 @@ import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.core.support.RepositoryComposition;
/**
* Unit tests for {@link GemfireRepositoryFactory}.
* Unit Tests for {@link GemfireRepositoryFactory}.
*
* @author Oliver Gierke
* @author John Blum
* @see org.junit.Test
* @see org.mockito.Mock
* @see org.mockito.Mockito
* @see org.springframework.data.gemfire.repository.support.GemfireRepositoryFactory
*/
@@ -76,24 +76,24 @@ public class GemfireRepositoryFactoryUnitTests {
@Before
@SuppressWarnings("unchecked")
public void setup() {
this.mappingContext = new GemfireMappingContext();
configureMockRegion(this.mockRegion, "simple", Object.class, Object.class);
configureMockRegion(this.mockRegion, "simple", Object.class);
}
@SuppressWarnings("unchecked")
private <K, V> Region<K, V> mockRegion(String name, Class<K> keyType, Class<V> valueType) {
return configureMockRegion(this.mockRegion, name, keyType, valueType);
private <K, V> Region<K, V> mockRegion(String name, Class<K> keyType) {
return configureMockRegion(this.mockRegion, name, keyType);
}
@SuppressWarnings("unchecked")
private <K, V> Region<K, V> configureMockRegion(Region<K, V> mockRegion, String name,
Class<K> keyType, Class<V> valueType) {
private <K, V> Region<K, V> configureMockRegion(Region<K, V> mockRegion, String name, Class<K> keyType) {
when(mockRegion.getAttributes()).thenReturn(this.mockRegionAttributes);
when(mockRegion.getFullPath()).thenReturn(RegionUtils.toRegionPath(name));
when(mockRegion.getName()).thenReturn(name);
when(this.mockRegionAttributes.getKeyConstraint()).thenReturn(keyType);
when(this.mockRegionAttributes.getValueConstraint()).thenReturn(valueType);
return mockRegion;
}
@@ -122,6 +122,7 @@ public class GemfireRepositoryFactoryUnitTests {
assertThat(repositoryFactory.getRegions()).contains(this.mockRegion);
}
@SuppressWarnings("all")
@Test(expected = IllegalArgumentException.class)
public void constructGemfireRepositoryFactoryWithNullMappingContextThrowsIllegalArgumentException() {
@@ -137,6 +138,7 @@ public class GemfireRepositoryFactoryUnitTests {
}
}
@SuppressWarnings("all")
@Test(expected = IllegalArgumentException.class)
public void constructGemfireRepositoryFactoryWithNullRegionsThrowsIllegalArgumentException() {
@@ -169,7 +171,7 @@ public class GemfireRepositoryFactoryUnitTests {
verify(mockPersistentEntity, times(1)).getRegionName();
verify(mockPersistentEntity, never()).getType();
verifyZeroInteractions(mockRepositoryMetadata);
verifyNoInteractions(mockRepositoryMetadata);
}
@Test
@@ -190,7 +192,7 @@ public class GemfireRepositoryFactoryUnitTests {
verify(mockPersistentEntity, times(1)).getRegionName();
verify(mockPersistentEntity, times(1)).getType();
verifyZeroInteractions(mockRepositoryMetadata);
verifyNoInteractions(mockRepositoryMetadata);
}
@Test
@@ -284,8 +286,8 @@ public class GemfireRepositoryFactoryUnitTests {
RepositoryMetadata mockRepositoryMetadata =
mockRepositoryMetadata(Person.class, Long.class, PeopleRepository.class);
Region<?, ?> mockRegionOne = mockRegion("RegionOne", Person.class, Long.class);
Region<?, ?> mockRegionTwo = mockRegion("RegionTwo", Object.class, Long.class);
Region<?, ?> mockRegionOne = mockRegion("RegionOne", Person.class);
Region<?, ?> mockRegionTwo = mockRegion("RegionTwo", Object.class);
GemfireRepositoryFactory repositoryFactory =
new GemfireRepositoryFactory(Arrays.asList(mockRegionOne, mockRegionTwo), this.mappingContext);
@@ -296,7 +298,7 @@ public class GemfireRepositoryFactoryUnitTests {
assertThat(repositoryFactory.resolveRegion(mockRepositoryMetadata, mockRegionOne.getFullPath()))
.isEqualTo(mockRegionOne);
verifyZeroInteractions(mockRepositoryMetadata);
verifyNoInteractions(mockRepositoryMetadata);
}
@Test(expected = IllegalStateException.class)
@@ -329,7 +331,7 @@ public class GemfireRepositoryFactoryUnitTests {
RepositoryMetadata mockRepositoryMetadata =
mockRepositoryMetadata(Person.class, Long.class, PeopleRepository.class);
Region<Long, Person> mockPeopleRegion = mockRegion("People", Long.class, Person.class);
Region<Long, Person> mockPeopleRegion = mockRegion("People", Long.class);
GemfireRepositoryFactory repositoryFactory =
new GemfireRepositoryFactory(Arrays.asList(this.mockRegion, mockPeopleRegion), mappingContext);
@@ -376,7 +378,7 @@ public class GemfireRepositoryFactoryUnitTests {
RepositoryMetadata mockRepositoryMetadata =
mockRepositoryMetadata(Person.class, Long.class, PeopleRepository.class);
Region<Integer, Person> mockPeopleRegion = mockRegion("People", Integer.class, Person.class);
Region<Integer, Person> mockPeopleRegion = mockRegion("People", Integer.class);
GemfireRepositoryFactory gemfireRepositoryFactory =
new GemfireRepositoryFactory(Collections.singleton(mockPeopleRegion), this.mappingContext);
@@ -410,7 +412,7 @@ public class GemfireRepositoryFactoryUnitTests {
RepositoryMetadata mockRepositoryMetadata =
mockRepositoryMetadata(Person.class, Integer.class, PeopleIntegerRepository.class);
Region<String, Person> mockPeopleRegion = mockRegion("People", null, null);
Region<String, Person> mockPeopleRegion = mockRegion("People", null);
GemfireRepositoryFactory gemfireRepositoryFactory =
new GemfireRepositoryFactory(Collections.singleton(mockPeopleRegion), this.mappingContext);
@@ -505,8 +507,7 @@ public class GemfireRepositoryFactoryUnitTests {
assertThat(((Advised) gemfireRepository).getTargetClass()).isEqualTo(TestCustomBaseRepository.class);
}
interface SamplePagingAndSortingRepository extends PagingAndSortingRepository<Person, Long> {
}
interface SamplePagingAndSortingRepository extends PagingAndSortingRepository<Person, Long> { }
static class TestCustomBaseRepository<T, ID extends Serializable> extends SimpleGemfireRepository<T, ID> {
@@ -522,7 +523,7 @@ public class GemfireRepositoryFactoryUnitTests {
}
class TestCustomRepositoryImpl<T> implements TestCustomRepository<T> {
static class TestCustomRepositoryImpl<T> implements TestCustomRepository<T> {
@Override
public void doCustomUpdate(T entity) {