JUnit - Extensões
A seguir estão as extensões JUnit -
- Cactus
- JWebUnit
- XMLUnit
- MockObject
Cacto
Cactus é uma estrutura de teste simples para teste de unidade de código java do lado do servidor (Servlets, EJBs, Tag Libs, Filtros). A intenção do Cactus é reduzir o custo de escrever testes para código do lado do servidor. Ele usa JUnit e o estende. Cactus implementa uma estratégia dentro do contêiner que executa os testes dentro de um contêiner.
O ecossistema de cactos é feito de vários componentes -
Cactus Frameworké o coração do Cactus. É o mecanismo que fornece a API para escrever testes Cactus.
Cactus Integration Modules são front-ends e frameworks que fornecem maneiras fáceis de usar o Cactus Framework (scripts Ant, plug-in Eclipse e plug-in Maven).
O código a seguir demonstra como o Cactus pode ser usado.
import org.apache.cactus.*;
import junit.framework.*;
public class TestSampleServlet extends ServletTestCase {
@Test
public void testServlet() {
// Initialize class to test
SampleServlet servlet = new SampleServlet();
// Set a variable in session as the doSomething()
// method that we are testing
session.setAttribute("name", "value");
// Call the method to test, passing an
// HttpServletRequest object (for example)
String result = servlet.doSomething(request);
// Perform verification that test was successful
assertEquals("something", result);
assertEquals("otherValue", session.getAttribute("otherName"));
}
}
JWebUnit
JWebUnit é uma estrutura de teste baseada em Java para aplicativos da web. Ele envolve as estruturas de teste existentes, como HtmlUnit e Selenium, com uma interface de teste simples e unificada para testar a exatidão de seus aplicativos da web.
JWebUnit fornece uma API Java de alto nível para navegar em um aplicativo da web combinada com um conjunto de asserções para verificar a exatidão do aplicativo. Isso inclui navegação por meio de links, entrada e envio de formulário, validação de conteúdo de tabela e outros recursos típicos de aplicativos da Web de negócios.
Os métodos de navegação simples e asserções prontas para uso permitem a criação de testes mais rápida do que usar apenas JUnit ou HtmlUnit. E se você quiser mudar de HtmlUnit para outros plug-ins como Selenium (disponível em breve), não há necessidade de reescrever seus testes.
Aqui está um código de amostra.
import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;
public class ExampleWebTestCase extends TestCase {
private WebTester tester;
public ExampleWebTestCase(String name) {
super(name);
tester = new WebTester();
}
//set base url
public void setUp() throws Exception {
getTestContext().setBaseUrl("http://myserver:8080/myapp");
}
// test base info
@Test
public void testInfoPage() {
beginAt("/info.html");
}
}
XMLUnit
XMLUnit fornece uma única classe de extensão JUnit, XMLTestCase, e um conjunto de classes de suporte que permitem que asserções sejam feitas sobre -
As diferenças entre duas partes do XML (por meio das classes Diff e DetailedDiff).
A validade de uma parte do XML (via classe Validator).
O resultado da transformação de um pedaço de XML usando XSLT (via classe Transform).
A avaliação de uma expressão XPath em um pedaço de XML (por meio de classes que implementam a interface XpathEngine).
Nós individuais em um fragmento de XML que são expostos pelo DOM Traversal (via classe NodeTest).
Vamos supor que temos duas peças de XML que desejamos comparar e afirmar que são iguais. Poderíamos escrever uma classe de teste simples como esta -
import org.custommonkey.xmlunit.XMLTestCase;
public class MyXMLTestCase extends XMLTestCase {
// this test method compare two pieces of the XML
@Test
public void testForXMLEquality() throws Exception {
String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
String myTestXML = "<msg><localId>2376</localId></msg>";
assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
}
}
MockObject
Em um teste de unidade, os objetos fictícios podem simular o comportamento de objetos reais complexos (não fictícios) e, portanto, são úteis quando um objeto real é impraticável ou impossível de ser incorporado em um teste de unidade.
O estilo de codificação comum para teste com objetos fictícios é -
- Crie instâncias de objetos fictícios.
- Defina o estado e as expectativas nos objetos fictícios.
- Chame o código de domínio com objetos fictícios como parâmetros.
- Verifique a consistência nos objetos fictícios.
A seguir está um exemplo de MockObject usando Jmock.
import org.jmock.Mockery;
import org.jmock.Expectations;
class PubTest extends TestCase {
Mockery context = new Mockery();
public void testSubReceivesMessage() {
// set up
final Sub sub = context.mock(Sub.class);
Pub pub = new Pub();
pub.add(sub);
final String message = "message";
// expectations
context.checking(new Expectations() {
oneOf (sub).receive(message);
});
// execute
pub.publish(message);
// verify
context.assertIsSatisfied();
}
}