Class NullPointerTester
- java.lang.Object
-
- com.google.common.testing.NullPointerTester
-
public final class NullPointerTester extends java.lang.Object
A test utility that verifies that your methods and constructors throwNullPointerException
orUnsupportedOperationException
whenever null is passed to a parameter whose declaration or type isn't annotated with an annotation with the simple nameNullable
, ,NullableType
, orNullableDecl
.The tested methods and constructors are invoked -- each time with one parameter being null and the rest not null -- and the test fails if no expected exception is thrown.
NullPointerTester
uses best effort to pick non-null default values for many common JDK and Guava types, and also for interfaces and public classes that have public parameter-less constructors. When the non-null default value for a particular parameter type cannot be provided byNullPointerTester
, the caller can provide a custom non-null default value for the parameter type viasetDefault(java.lang.Class<T>, T)
.- Since:
- 10.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
NullPointerTester.ExceptionTypePolicy
Strategy for exception type matching used byNullPointerTester
.private static class
NullPointerTester.Signature
static class
NullPointerTester.Visibility
Visibility of any method or constructor.
-
Field Summary
Fields Modifier and Type Field Description private ClassToInstanceMap<java.lang.Object>
defaults
private java.util.List<java.lang.reflect.Member>
ignoredMembers
private static ImmutableSet<java.lang.String>
NULLABLE_ANNOTATION_SIMPLE_NAMES
private NullPointerTester.ExceptionTypePolicy
policy
-
Constructor Summary
Constructors Constructor Description NullPointerTester()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.lang.Object[]
buildParamList(Invokable<?,?> invokable, int indexOfParamToSetToNull)
private <F,T>
Converter<F,T>defaultConverter(TypeToken<F> convertFromType, TypeToken<T> convertToType)
private <T> T
getDefaultValue(TypeToken<T> type)
private static TypeToken<?>
getFirstTypeParameter(java.lang.reflect.Type type)
(package private) ImmutableList<java.lang.reflect.Method>
getInstanceMethodsToTest(java.lang.Class<?> c, NullPointerTester.Visibility minimalVisibility)
NullPointerTester
ignore(java.lang.reflect.Constructor<?> constructor)
Ignoreconstructor
in the tests that follow.NullPointerTester
ignore(java.lang.reflect.Method method)
Ignoremethod
in the tests that follow.private static Invokable<?,?>
invokable(java.lang.Object instance, java.lang.reflect.Method method)
private static boolean
isEquals(java.lang.reflect.Member member)
Returns true if the the given member is a method that overridesObject.equals(Object)
.private boolean
isIgnored(java.lang.reflect.Member member)
(package private) static boolean
isNullable(Invokable<?,?> invokable)
(package private) static boolean
isNullable(Parameter param)
private static boolean
isNullable(java.lang.annotation.Annotation[] annotations)
(package private) static boolean
isPrimitiveOrNullable(Parameter param)
private <T> T
newDefaultReturningProxy(TypeToken<T> type)
<T> NullPointerTester
setDefault(java.lang.Class<T> type, T value)
Sets a default value that can be used for any parameter of typetype
.void
testAllPublicConstructors(java.lang.Class<?> c)
RunstestConstructor(java.lang.reflect.Constructor<?>)
on every public constructor in classc
.void
testAllPublicInstanceMethods(java.lang.Object instance)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public instance method of the class ofinstance
, including those inherited from superclasses of the same package.void
testAllPublicStaticMethods(java.lang.Class<?> c)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public static method of classc
, including those "inherited" from superclasses of the same package.void
testConstructor(java.lang.reflect.Constructor<?> ctor)
Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null.void
testConstructorParameter(java.lang.reflect.Constructor<?> ctor, int paramIndex)
Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null.void
testConstructors(java.lang.Class<?> c, NullPointerTester.Visibility minimalVisibility)
RunstestConstructor(java.lang.reflect.Constructor<?>)
on every constructor in classc
that has at leastminimalVisibility
.void
testInstanceMethods(java.lang.Object instance, NullPointerTester.Visibility minimalVisibility)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every instance method of the class ofinstance
with at leastminimalVisibility
, including those inherited from superclasses of the same package.void
testMethod(java.lang.Object instance, java.lang.reflect.Method method)
Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null.void
testMethodParameter(java.lang.Object instance, java.lang.reflect.Method method, int paramIndex)
Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null.private void
testParameter(java.lang.Object instance, Invokable<?,?> invokable, int paramIndex, java.lang.Class<?> testedClass)
Verifies thatinvokable
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null.void
testStaticMethods(java.lang.Class<?> c, NullPointerTester.Visibility minimalVisibility)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every static method of classc
that has at leastminimalVisibility
, including those "inherited" from superclasses of the same package.
-
-
-
Field Detail
-
defaults
private final ClassToInstanceMap<java.lang.Object> defaults
-
ignoredMembers
private final java.util.List<java.lang.reflect.Member> ignoredMembers
-
policy
private NullPointerTester.ExceptionTypePolicy policy
-
NULLABLE_ANNOTATION_SIMPLE_NAMES
private static final ImmutableSet<java.lang.String> NULLABLE_ANNOTATION_SIMPLE_NAMES
-
-
Method Detail
-
setDefault
public <T> NullPointerTester setDefault(java.lang.Class<T> type, T value)
Sets a default value that can be used for any parameter of typetype
. Returns this object.
-
ignore
public NullPointerTester ignore(java.lang.reflect.Method method)
Ignoremethod
in the tests that follow. Returns this object.- Since:
- 13.0
-
ignore
public NullPointerTester ignore(java.lang.reflect.Constructor<?> constructor)
Ignoreconstructor
in the tests that follow. Returns this object.- Since:
- 22.0
-
testConstructors
public void testConstructors(java.lang.Class<?> c, NullPointerTester.Visibility minimalVisibility)
RunstestConstructor(java.lang.reflect.Constructor<?>)
on every constructor in classc
that has at leastminimalVisibility
.
-
testAllPublicConstructors
public void testAllPublicConstructors(java.lang.Class<?> c)
RunstestConstructor(java.lang.reflect.Constructor<?>)
on every public constructor in classc
.
-
testStaticMethods
public void testStaticMethods(java.lang.Class<?> c, NullPointerTester.Visibility minimalVisibility)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every static method of classc
that has at leastminimalVisibility
, including those "inherited" from superclasses of the same package.
-
testAllPublicStaticMethods
public void testAllPublicStaticMethods(java.lang.Class<?> c)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public static method of classc
, including those "inherited" from superclasses of the same package.
-
testInstanceMethods
public void testInstanceMethods(java.lang.Object instance, NullPointerTester.Visibility minimalVisibility)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every instance method of the class ofinstance
with at leastminimalVisibility
, including those inherited from superclasses of the same package.
-
getInstanceMethodsToTest
ImmutableList<java.lang.reflect.Method> getInstanceMethodsToTest(java.lang.Class<?> c, NullPointerTester.Visibility minimalVisibility)
-
testAllPublicInstanceMethods
public void testAllPublicInstanceMethods(java.lang.Object instance)
RunstestMethod(java.lang.Object, java.lang.reflect.Method)
on every public instance method of the class ofinstance
, including those inherited from superclasses of the same package.
-
testMethod
public void testMethod(java.lang.Object instance, java.lang.reflect.Method method)
Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null.- Parameters:
instance
- the instance to invokemethod
on, or null ifmethod
is static
-
testConstructor
public void testConstructor(java.lang.reflect.Constructor<?> ctor)
Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
whenever any of its non-nullable parameters are null.
-
testMethodParameter
public void testMethodParameter(java.lang.Object instance, java.lang.reflect.Method method, int paramIndex)
Verifies thatmethod
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null. If this parameter is marked nullable, this method does nothing.- Parameters:
instance
- the instance to invokemethod
on, or null ifmethod
is static
-
testConstructorParameter
public void testConstructorParameter(java.lang.reflect.Constructor<?> ctor, int paramIndex)
Verifies thatctor
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null. If this parameter is marked nullable, this method does nothing.
-
testParameter
private void testParameter(java.lang.Object instance, Invokable<?,?> invokable, int paramIndex, java.lang.Class<?> testedClass)
Verifies thatinvokable
produces aNullPointerException
orUnsupportedOperationException
when the parameter in positionparamIndex
is null. If this parameter is marked nullable, this method does nothing.- Parameters:
instance
- the instance to invokeinvokable
on, or null ifinvokable
is static
-
buildParamList
private java.lang.Object[] buildParamList(Invokable<?,?> invokable, int indexOfParamToSetToNull)
-
getDefaultValue
private <T> T getDefaultValue(TypeToken<T> type)
-
defaultConverter
private <F,T> Converter<F,T> defaultConverter(TypeToken<F> convertFromType, TypeToken<T> convertToType)
-
getFirstTypeParameter
private static TypeToken<?> getFirstTypeParameter(java.lang.reflect.Type type)
-
newDefaultReturningProxy
private <T> T newDefaultReturningProxy(TypeToken<T> type)
-
invokable
private static Invokable<?,?> invokable(java.lang.Object instance, java.lang.reflect.Method method)
-
isPrimitiveOrNullable
static boolean isPrimitiveOrNullable(Parameter param)
-
isNullable
static boolean isNullable(Invokable<?,?> invokable)
-
isNullable
static boolean isNullable(Parameter param)
-
isNullable
private static boolean isNullable(java.lang.annotation.Annotation[] annotations)
-
isIgnored
private boolean isIgnored(java.lang.reflect.Member member)
-
isEquals
private static boolean isEquals(java.lang.reflect.Member member)
Returns true if the the given member is a method that overridesObject.equals(Object)
.The documentation for
Object.equals(java.lang.Object)
says it should accept null, so don't require an explicit annotation (see #1819).It is not necessary to consider visibility, return type, or type parameter declarations. The declaration of a method with the same name and formal parameters as
Object.equals(java.lang.Object)
that is not public and boolean-returning, or that declares any type parameters, would be rejected at compile-time.
-
-