O documento resume um workshop sobre testes automatizados, refactoring e design patterns. O workshop foi apresentado por dois desenvolvedores e abordou tópicos como a pirâmide de testes, teste de unidade, refactoring utilizando padrões como extrair método e extrair classe.
2. Maurício Andreazza Sganderla - @m_andreazza
• Desenvolvedor na uMov.me
• Aficionado por Agile
• No mercado de T.I. há 8 anos
• Formado em Sistemas de Informação
• Pós-Graduando em Métodos Ágeis
Jorge Oleques - @jorgeoleques
• Desenvolvedor na uMov.me
• Entusiasta XP
• No mercado de T.I. há 6 anos
• Formado Analise e Desenvolvimento
• Pós-Graduando em Eng. Software na FGV
25. public void save()
{
// Verifica propriedades
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome");
}
else if (this.getTipo() == "E"&& this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
this.getDatabase().save(this);
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
código ruim
26. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
código melhor
28. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
código melhor
29. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
como vamos testar?
30. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
33. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
34. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
REFATORAR ENTÃO
35. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
quantas responsabilidade?
1. extrair para uma clase
2. extrair para metodo
3. extrair interface
4. aplicar strategy
5. criar factory
36.
37. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
Extrair para uma classe
1. extrair para uma clase
2. extrair para metodo
3. extrair interface
4. aplicar strategy
5. criar factory
38. public classe checkProperties{
public void check()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
Extrair para uma classe
39. public classe checkProperties{
public void check()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
quantas responsabilidades?
40. public classe checkProperties{
public void check()
{
validateName();
validateDescription();
}
public void validateName() {
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
public void validateDescription() {
if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
Extrair para metodo
41. public classe checkProperties{
public void check()
{
validateName();
validateDescription();
}
public void validateName() {
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
public void validateDescription() {
if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
métodos testaveis
43. public classe checkProperties{
public void check()
{
validateName();
validateDescription();
}
public void validateName() {
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
public void validateDescription() {
if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
}
aplicar strategy
44. public classe checkNome implements Check{
@Override
public void check() {
if (this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
}
}
aplicar strategy
45. public classe checkDescritpion implements Check{
@Override
public void check() {
if (this.getDescription() == null){
throw new Exception("Falta a descrição do produto.");
}
}
}
aplicar strategy
46. public classe CheckFactory{
public static Check getInstance(String type) {
if (type == "E"){
return new CheckDescription();
}else if (type == "P"){
return new CheckName();
}
}
aplicar factory
47. public void save()
{
this.checkProperties();
this.getDatabase().save(this);
}
private void checkProperties()
{
if (this.getTipo() == "P" && this.getName() == null) {
throw new Exception("Falta nome do produto.");
}
else if (this.getTipo() == "E" && this.getDescription() == null) {
throw new Exception("Falta a descrição do produto.");
}
}
fonte:http://pt.wikipedia.org/wiki/Refatoração
o que tinhamos