NemerleUnit
От: PhantomIvan  
Дата: 03.12.06 04:29
Оценка: 12 (2)
в Немерле мы обычно использовали обычный NUnit для тестирования

недавно Камил Двораковский добавил синтаксический сахар для тестов
это дело называется NemerleUnit:

NemerleUnit — это DSL для написания NUnit-тестов. Тесты, определенные NemerleUnit-ом трансформируются в эквивалентные NUnit-тесты во время компиляции. Используйте NUnit для их запуска.

NemerleUnit не работает с версией Немерле 0.9.3. Вам понадобится компилятор, как минимум, 7030-ой ревизии из svn-репозитория. Это означает, что вам понадобится собрать компилятор из исходников*.

* — достаточно стянуть с свн-а и запустить BuildAndReg.cmd

как утверждает автор, NemerleUnit довольно стабилен на текущий момент (есть известный баг, по ссылке выше)

пример применения:
#pragma indent
using NemerleUnit
using System //workaround for the bug
 
setup
    def abc = ["a","b","c"]
 
teardown
    () // you could dispose here
 
test "length of an empty list"
    assert [].Length equals 0 
 
test "length of a three element list"
    assert abc.Length equals 3
 
test "equals"
    assert abc equals ["a","b","c"] 
    assert abc does not equal ["c","b","a"] 
 
test "contains"
    assert abc.Contains("a") 
    assert abc.Contains("b")
    assert abc.Contains("c")


билдить нужно со ссылкой на NemerleUnit.dll:

ncc -r NUnit.Framework.dll -r NemerleUnit.dll -t library -o tests.dll example.n


ещё примеры здесь

макросы, которые реализуют это можно посмотретьздесь
например, макрос, собственно test:
macro test(name, code) syntax ("test", name, code ) 
        def (sequence,sequence_teardown) = Store.getSetupAndTeardownSequences(Nemerle.Macros.ImplicitCTX().CurrentType.Name)
        def test_body = match(code)
                | <[{..$expresions}]> =>
                        List.Flatten( [sequence,expresions,sequence_teardown])
                | _ => [<[]>]

        def a_test = <[ 
                decl: [Test] public $(name.ToString().Replace("\"", "") : dyn)(): void  {
                        ..$test_body
                }
        ]>;
        Nemerle.Macros.ImplicitCTX().CurrentType.Define(a_test)
        Nemerle.Macros.ImplicitCTX().CurrentType.GetModifiers().AddCustomAttribute (<[ TestFixture ]>)
        <[]>


всё по поводу этих тестов лежит на этой ветке
(его там немного)

если будут замечания/пожелания — с удовольствием передам автору
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>

30.01.07 18:06: Перенесено модератором из 'Декларативное программирование' — IT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.