qc

Tela Software:
qc
Detalhes de Software:
Versão: 0.1
Data de upload: 14 Apr 15
Revelador: Peter Scott
Licença: Livre
Popularidade: 23

Rating: 4.0/5 (Total Votes: 2)

qc é uma ferramenta de teste que lhe permite escrever as propriedades que você espera para ser verdade, e deixar o computador gerar casos de teste randomizados para verificar se essas propriedades realmente manter & nbsp;. Por exemplo, se você escreveu comprimir e descomprimir funções para algum programa de compressão de dados, uma propriedade óbvio para teste é que a compressão e descompressão uma seqüência dá de volta a string original. Veja como você poderia expressar que:
unittest importação
qc importação
TestCompression classe (unittest.TestCase):
& Nbsp; @ qc.property
& Nbsp; def test_compress_decompress (self):
& Nbsp; "" ". Teste que a compressão e descompressão retorna os dados originais" ""
& Nbsp; data = qc.str () # uma seqüência arbitrária. Os valores são randomizados.
& Nbsp; self.assertEqual (dados, descomprimir (comprimir (data)), repr (data))
Isso é um teste comum com built-in quadro unittest do Python (que é por isso que há tanta coisa clichê). Alternativamente, você pode fazer exatamente a mesma coisa com uma estrutura de teste diferente, como o minimamente detalhado, nariz bastante agradável. O decorador @ qc.property executa a função decorado várias vezes, e cada vez que os valores retornados por funções como qc.string () são diferentes. Em outras palavras, QuickCheck é compatível com praticamente todos os framework de teste de unidade lá fora; Não é particularmente exigente.
Funciona como qc.str (), qc.int (), e assim por diante, gerar valores arbitrários de um certo tipo. No exemplo acima, estamos afirmando que a propriedade vale para todas as cadeias. Quando você executar os testes, QuickCheck irá gerar seqüências randomizados para testes.
Você vai notar que eu disse "randomizado", não "random". Isso é intencional. A distribuição dos valores é ajustada para incluir valores interessantes, como cadeias vazias, ou cordas com caracteres NUL no meio, ou seqüências contendo texto em Inglês. Em geral, QuickCheck tenta dar uma boa mistura de valores difíceis inteligentes e aleatoriedade. Isso é essencialmente o que você faria, se você tivesse que escrever casos de teste realmente completos à mão, exceto que você não tem que fazê-lo. Na prática, o computador tem menos preconceitos sobre o que constitui dados sãos, por isso, muitas vezes, encontrar bugs que nunca teria ocorrido a você para escrever casos de teste para. Ele não sabe como evitar inconscientemente os bugs.
Você não está limitado às funções de valor arbitrários embutidos. Você pode usá-los como blocos de construção para gerar o seu próprio. Por exemplo:
classe Point (objeto):
& Nbsp; def __init __ (self, x, y):
& Nbsp; self.x, self.y = float (x), float (y)
ponto def ():
& Nbsp; "" "Obter um ponto arbitrário." ""
& Nbsp; x = qc.int (-20, 20)
& Nbsp; y = qc.int (-34, 50)
& Nbsp; retornar ponto (x, y)
Você pode usar isso para gerar valores de pontos arbitrários em propriedades. Aqui está um teste de estilo nariz:
@ Qc.property
test_triangle_inequality def ():
& Nbsp; pt = ponto ()
& Nbsp; afirmam abs (pt.x) + abs (pt.y)> = Math.sqrt (pt.x ** 2 + pt.y ** 2), (pt.x, pt.y)
Quando você executar este, algo mágico acontece: QuickCheck tentará gerar valores complicado para ambas as variáveis ​​x e y na classe Point, juntos, então você vai ver como pontos (0, 0), (1, 1), ( 0, 1), (0, 385904), bem como os totalmente aleatórios, como (584, -35809648). Em outras palavras, ao invés de apenas desenhar os valores xey de um fluxo de números aleatórios com alguns valores complicado nele, QuickCheck vai realmente tentar gerar combinações complicadas de coordenadas x e y.
Funções para obter dados arbitrários
- Int (baixo, alto) dá ints, entre os limites opcionais baixas e altas.
- Longa (baixa e alta) dá longs, entre os limites opcionais baixas e altas.
- Float (baixo, alto) dá carros alegóricos, entre os limites opcionais baixas e altas. Não há infinitos ou NaN valores.
& Nbsp; str (length = None, maxlen = None) dá cordas, do tipo str. A codificação é UTF-8. Se o comprimento é dado, as cordas será exatamente esse tempo. Se maxlen é dado, o comprimento da corda será caracteres no máximo maxlen.
- Unicode (length = None, maxlen = None) dá strings unicode, do tipo unicode. Se o comprimento é dado, as cordas será exatamente esse tempo. Se maxlen é dado, o comprimento da corda será caracteres no máximo maxlen.
- Name () dá nomes, em Unicode. Estes vão desde o prosaico, como "John Smith", ao exótico - os nomes que contenham espaços não quebra, ou endereços de e-mail, ou caracteres Unicode fora do Plano Multilingual Básico. Isto é, se alguma coisa, menos perversa do que os nomes que você vai ver em uma suficientemente grande conjunto de dados da Internet.
- NameUtf8 () é o mesmo que o nome () codificar ('utf8')..
- Lista_do_from (itens) retorna itens aleatórios a partir de uma lista. Isto é útil para a criação de suas próprias funções de gerador de dados arbitrários.
- Randstr (comprimento = None, maxlen = sys.maxint) dá seqüências de bytes aleatórios. Se o comprimento é dado, as cordas será exatamente esse tempo. Se maxlen é dado, o comprimento da corda será, no máximo, maxlen bytes.
As cordas produzidos por str e unicode são aleatórios, mas algum esforço foi colocado em tornando-os suficientemente perverso como para revelar erros em um monte de código de processamento de string. A lista de nomes é vagamente baseado em memórias horríveis de ver acidente de código de processamento de nome em dados do mundo real, uma e outra e outra vez, como se tornou cada vez mais claro que o mundo é louco, e estamos realmente condenado. (Este sentimento passa uma vez que você começa a cobertura do teste suficiente e as coisas finalmente parar de bater. Há esperança!)
Os dados de nome e exemplo de cadeia em qc.arbitrary pode ser interessante como fonte de mais dados do caso de teste deteministic. Sinta-se livre para pedir nada disso. Os internos são mágicos, mas das partes internas mágicos, os mais interessantes são em qc.arbitrary e qc

Requisitos :.

  • Python

Programas semelhantes

nose-skipreq
nose-skipreq

12 May 15

Pulse
Pulse

20 Feb 15

Jensor
Jensor

2 Jun 15

Comentário para qc

Comentários não encontrado
Adicionar comentário
Ligue imagens!