O PonyTest é a estrutura de teste da unidade Pony. Foi projetado para ser o mais simples possível de usar, tanto para o autor do teste unitário quanto para o usuário que executa os testes.
Cada teste de unidade é uma classe, com uma única função de teste. Por padrão, todos os testes são executados concomitantemente. Cada teste de teste é fornecido com um objeto auxiliar. Isto fornece funções de registro e asserção.
Por padrão, as mensagens de registro só são mostradas para testes que falham.
Exemplo de programa
Para usar o PonyTest simplesmente escreva uma classe para cada teste e um tipo TestList que informe o objeto PonyTest sobre os testes. Tipicamente a TestList será a Principal para o pacote.
O seguinte é um programa completo com 2 testes triviais.
use "ponytest"
actor Main is TestList
new create(env: Env) =>
PonyTest(env, this)
new make() =>
None
fun tag tests(test: PonyTest) =>
test(_TestAdd)
test(_TestSub)
class iso _TestAdd is UnitTest
fun name(): String => "addition"
fun apply(h: TestHelper) =>
h.assert_eq[U32](4, 2 + 2)
class iso _TestSub is UnitTest
fun name(): String => "subtraction"
fun apply(h: TestHelper) =>
h.assert_eq[U32](2, 4 - 2)
O construtor da make() não é necessário para este exemplo. Entretanto, ele permite uma fácil agregação de testes (ver abaixo), por isso é recomendável que todos os testes sejam fornecidos pela Mains.
Main.create() é chamado apenas para invocações de programas no pacote atual. Main.make() é chamado durante a agregação. Se assim desejar, código extra pode ser adicionado a qualquer um destes construtores para realizar tarefas adicionais.
(Se estiver usando o Docker, escreva algo como $ docker run -v Some_Absolute_Path/helloworld:/src/main ponylang/ponyc, dependendo, claro, de qual é o caminho absoluto para o seu diretório helloworld).
Montamos o diretório atual, ., mais o material que está incorporado no Pony, construiu, gerou algum código, otimizou-o, criou um arquivo objeto (não se preocupe se não souber o que é), e o vinculou a um executável com quaisquer bibliotecas que fossem necessárias. Se for um programador C/C++, tudo isso fará sentido para ti, caso contrário, provavelmente não fará, mas não faz mal, pode ignorá-lo.