Posts Tagged ‘junit’
Unit Test Private Java Methods using Reflection
Thursday, May 5th, 2011
Introduction
I realise that the thought of Unit Testing private methods in Java classes can be like a red rag to a bull for some people and I understand the arguments.
Therefore, I present the following as a “how to”, not a moral argument for or against!
Example
The class under test
public class Product() { private String privateMethod(String id) { //Do something private return "product_" + id; } }
The (Reflection Based) Unit Test
import java.lang.reflect.Method; import static org.junit.Assert.*; import org.junit.Test; public class ProductTest { private Product product; // the class under test private Method m; private static String METHOD_NAME = "privateMethod"; private Class[] parameterTypes; private Object[] parameters; @Before public void setUp() throws Exception { product = new Product(); parameterTypes = new Class[1]; parameterTypes[0] = java.lang.String.class; m = product.getClass().getDeclaredMethod(METHOD_NAME, parameterTypes); m.setAccessible(true); parameters = new Object[1]; } @Test public void testPrivateMethod() throws Exception { parameters[0] = "someIdentifier"; String result = (String) m.invoke(product, parameters); //Do your assertions assertNotNull(result); } }
Update
I’ve since been told that if dp4j.jar is in the classpath at compile-time, it will inject the necessary reflection to make this work. I haven’t had time to try this yet so YMMV.
Tags: java, junit, testing
Posted in Development, How to's | No Comments »
Unit Testing Validation in Annotation Based Validating Spring Beans
Friday, April 22nd, 2011
Motivation
I added validation, via annotations, to a Spring “Model” bean. I needed someway to Unit Test this validation, without running the container and without initialising the Spring context.
The bean (simplified)
package foo.bar; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; public final class ProductModel { @NotNull @Size(max=100) @Pattern(regexp="[^\n^\t^\r]+", message="Long Name must not contain New Lines, Carriage Returns or Tabs") private String longName; @Size(max=20) private String shortName; // rest snipped for brevity }
The Unit Test
package foo.bar; import java.util.Set; import javax.validation.ConstraintViolation; import junit.framework.Assert; import org.hibernate.validator.HibernateValidator; import org.junit.Before; import org.junit.Test; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; public class Temp { private LocalValidatorFactoryBean localValidatorFactory; @Before public void setup() { localValidatorFactory = new LocalValidatorFactoryBean(); localValidatorFactory.setProviderClass(HibernateValidator.class); localValidatorFactory.afterPropertiesSet(); } @Test public void testLongNameWithInvalidCharCausesValidationError() { final ProductModel productModel = new ProductModel(); productModel.setLongName("A long name with\t a Tab character"); Set<ConstraintViolation<ProductModel>> constraintViolations = localValidatorFactory.validate(productModel); Assert.assertTrue("Expected validation error not found", constraintViolations.size() == 1); } }
More
It actually took me a few hours to work the above test out (simple as it is). If I hadn’t stumbled upon these Spring Unit Tests, I might never have got it.
Tags: annotations, java, junit, spring, testing
Posted in Spring | 3 Comments »
JUnit 4 Test Class with annotations
Tuesday, June 8th, 2010
A simple example of a JUnit 4 Test class marked up with annotations.
(more…)
Tags: java, junit, testing
Posted in Examples | No Comments »