Teste com o PonyTest

    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.