2015-11-06 2 views
1
let d5=["IIII";"VVVV";"XXXX";"LLLL";"MMMM"] 

[<Test; ExpectedException(typeof<System.Exception>)>] 
    member this. 
     ``More than 3 times repetive characters ``()= 
     //Missing part 

Этот тест не работает. У меня есть конвертер, который анализирует номера Рима. Но это работает неправильноИспользование List.map с должен бросать Исключение

[ "IIII"; "VVVV", "XXXX", "Llll", "MMMM"]

При отправке обращенного ("IIII") он возвращает 4 , но он должен был дать ошибку System.Exception. Мне нужно написать NUnit test (не исправить конвертер), который отображает каждую строку в списке и передает, когда каждый из них возвращает ошибку. В противном случае сбой. Тестирование, которое я хочу написать, следующее.

d5=["IIII";"VVVV";"XXXX";"LLLL";"MMMM"] 
convert each d5 element 
if each of them is giving system.exception error 
then test is successfull 
else test is failed 

Любое решение? Есть идеи. , Если вас интересует метод преобразования здесь Convert Method

+0

Там нет реализации вашей 'convert' функции. Может быть, вы забыли добавить его? – Petr

+0

Я ссылался на него, и он отлично работает для других тестов. –

+1

Поскольку кода нет, тогда нет возможности исправить функцию. – Petr

ответ

1

Что вы хотите, чтобы проверить все значения отдельно:

open NUnit.Framework 
open FsUnit 

type ConvertTest() = 

    let convert s = 
     if String.length s > 3 then failwith "Something's wrong" 
     else String.length s 

    [<Theory>] 
    member this.``More than 3 characters throws``([<Values("IIII", "VVVVVV", "XXXX", "LLLL", "MMMM")>] s) = 
     (fun() -> convert s |> ignore) |> should throw typeof<System.Exception> 

    [<Theory>] 
    member this.``Less than 4 characters returns length``([<Values("II", "VV", "XXX", "LLL", "MMM")>] s) = 
     convert s |> should equal s.Length 

Я сознательно изменил метод преобразования в несколько иной реализации (как вы не дали ни одного), но должно быть очевидно, как действовать.

+0

Извините, вы не можете изменить способ конвертации. У меня есть dll метода convert. И я его тестирую. Я поделился методом конвертации в комментариях, потому что, не имея дальнейшего недоразумения, я поставил его и в вопросе. Еще раз спасибо –

+0

@ EtibarHəsənov Вы все равно должны использовать тесты, как предусмотрено. Я поставил 'convert', чтобы он скомпилировался. – CaringDev

2

Вы можете использовать TestCase атрибуты спараметрировать тест, и Assert.Throws, чтобы проверить, что было брошено исключение:

open System 
open NUnit.Framework 

[<TestFixture>] 
type Tests() = 

    [<TestCase("IIII")>] 
    [<TestCase("VVVV")>] 
    [<TestCase("XXXX")>] 
    [<TestCase("LLLL")>] 
    [<TestCase("MMMM")>] 
    member this.ThrowsOnInvalidInput (cand : string) = 
     Assert.Throws<Exception> (fun() -> convert cand |> ignore) |> ignore 
+0

Есть ли какая-либо возможность быть списком строк? например: let cand = ["IIII", "VVVV", "XXXX", "LLLL", "MMMM"]. –

Смежные вопросы