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 | No 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 »
