Existe uma estrutura de teste de unidade Java que auto-testes getters e setters? [fechadas]

StackOverflow https://stackoverflow.com/questions/108692

  •  01-07-2019
  •  | 
  •  

Pergunta

Há um debate bem conhecido em Java (e outras comunidades, tenho certeza) ou não métodos getter / setter triviais devem ser testados. Normalmente, isso é com relação à cobertura de código. Vamos concordar que este é um debate aberto, e não tentar respondê-la aqui.

Tem havido vários posts sobre o uso de reflexão Java para auto-teste tais métodos.

Será que qualquer quadro (por exemplo jUnit) fornecer tal recurso? por exemplo. Uma anotação que diz "este teste T deve auto-teste todos os getters / setters na classe C, porque eu afirmo que eles são padrão".

Parece-me que iria adicionar valor, e se fosse configurável, o 'debate' seria deixado como uma opção para o usuário.

Foi útil?

Solução

Unitils faz isso w / o assertRefEquals método estático.

Outras dicas

Eu não estou ciente de qualquer biblioteca prontamente disponíveis ou classe que faz isso. Isso pode ser principalmente porque eu não me importo como eu estou do lado de opor fortemente tais testes. Assim, mesmo que você perguntou há deve ser um pouco de justificativa para este ponto de vista:

duvido que autotesting getters e setters beneficiar a sua qualidade de código ou sua cobertura: Ou esses métodos são usados ??de outro código (e testado há, por exemplo, 100% de cobertura) ou não usado em tudo (e poderia ser removido). No final você vai deixar getters e setters em porque eles são usados ??a partir do teste, mas em nenhum outro lugar no aplicativo.

Deve ser fácil para escrever tal teste um, por exemplo, com Apache Commons BeanUtils, mas duvido que você realmente precisa dele se você tiver bons testes de outra forma.

Na maioria dos casos setter e não mais apenas como definição getter e obter um campo interno. Um objeto tem de verificar as regras internas que conter apenas os valores válidos. Por exemplo

  • são valores nulos possível?
  • são strings vazias possível?
  • ou negativos valores?
  • ou um valor de zero?
  • ou valores de uma lista são válidos?
  • ou existe um valor máximo?
  • ou há uma máxima precisão nos valores BigDecimal?

O teste de unidade deve verificar se o comportamento correto se há valores inválidos. Isso não pode ser automatizado.

Se você não tem lógica no setter e getter então ele deve ser usado em qualquer lugar na sua aplicação. Escrever um teste onde o objeto é um parâmetro para um teste mais complexo. Você pode testá-lo, em seguida, com diferentes valores da lista.

Test sua lógica de negócios e não o getter e setter. O resultado deve também a cobertura do getter e setter. Os métodos devem ser qualquer resultado em sua lógica de negócios também se você tem apenas uma biblioteca pública. Se o getter e setter não têm cobertura de código, em seguida, removido.

Eu fiz algo parecido. Uma classe java simples que leva um objeto e teste de todos os getters e métodos setter. http://sourceforge.net/projects/getterandsetter/

Eu acho que você deve evitar get e set métodos, tanto quanto possível, mas enquanto eles estão ao redor e leva duas linhas para testá-los, é uma boa coisa para fazê-lo.

Eu vou favorecer projeto OO sobre cobertura de código, e ver se eu não posso mover os campos para a classe que precisa deles. Assim, gostaria de tentar ver se essas getters e setters podem ser removidos, como sugerido antes. getters e formadores são quebrar encapsulamento .

Eu acho que esta biblioteca é a resposta à sua pergunta

testa todos os valores iniciais do feijão, o setters, o getters, hashCode(), equals() and toString(). Tudo que você tem a fazer é definir um mapa de padrão e não propriedade padrão / valor.

Pode também objetos de teste que são feijão com construtores não padrão adicionais.

Eu estou tentando sair openpojo

Eu chutou os pneus e parece fazer o trabalho.

  1. Ele permite que você verifique todas as pojo de em seu projeto.
  2. Parece verificar as melhores práticas sobre o pojo

Confira este tutorial para um início rápido Tutorial

Respondendo a comentário anterior em @ me aqui por causa da minha reputação:

Vlookward, não escrever getters / setters não faz sentido em tudo. As únicas opções para configurar campos privados é ter setters explícitas, para defini-los em seu construtor, ou para definir os indirectamente através de outros métodos (funcionalmente adiando o setter para outro lugar). Por que não usar setters?

Bem, às vezes, não há necessidade do campo ser privada (Desculpe se o meu Inglês não é muito bom). Muitas vezes, nós escrevemos o nosso software como se fosse uma biblioteca e encapsular os nossos campos (os nossos campos de lógica de negócios) com getters desnecessários / setters.

Outras vezes, que os métodos são realmente necessárias. Então, há duas possibilidades:
1. Há uma lógica de negócios dentro deles. Em seguida, eles sould ser testado, mas eles não são getters reais / setters. Eu sempre escrevo essa lógica em outras classes. Eo teste de testes que outras classes, não o POJO .
2. Não há. Então, não escrevê-los à mão, se você puder. Por exemplo, uma aplicação para a próxima interface pode ser totalmente gerada automaticamente (e também em tempo de execução!):

interface NamedAndObservable {
  String getName();
  void setName(String name);
  void addPropertyChangeListener(PropertyChangeListener listener);
  void addPropertyChangeListener(String propertyName,
                                 PropertyChangeListener listener);
}

Assim teste só o que está escrito à mão. Não importa se é um getter / setter.

eu não faço casos de teste de gravação para cada propriedade, mas sim testar todos os setters / getters em um único caso de teste usando a reflexão / introspector para determinar o tipo (s). Aqui é um ótimo recurso que mostra isso:

http://www.nearinfinity.com/blogs/scott_leberknight/do_you_unit_test_getters.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top