Chciałbym być zamiar użyć listy, tablicy i/lub seq jako parametr do InlineData xUnit's.W F # jak przekazać kolekcję do atrybutu InlineData xUnit
W języku C# można to zrobić:
using Xunit; //2.1.0
namespace CsTests
{
public class Tests
{
[Theory]
[InlineData(new[] {1, 2})]
public void GivenCollectionItMustPassItToTest(int[] coll)
{
Assert.Equal(coll, coll);
}
}
}
w F # mam to:
namespace XunitTests
module Tests =
open Xunit //2.1.0
[<Theory>]
[<InlineData(8)>]
[<InlineData(42)>]
let ``given a value it must give it to the test`` (value : int) =
Assert.Equal(value, value)
[<Theory>]
[<InlineData([1; 2])>]
let ``given a list it should be able to pass it to the test``
(coll : int list) =
Assert.Equal<int list>(coll, coll)
[<Theory>]
[<InlineData([|3; 4|])>]
let ``given an array it should be able to pass it to the test``
(coll : int array) =
Assert.Equal<int array>(coll, coll)
F # Kod podać następujące zbudować błędy:
Library1.fs (13, 16): nie jest to poprawne wyrażenie stałe lub wartość atrybutu niestandardowego
Library1.fs (18, 16), to nie jest ważny stałej ekspresji lub niestandardowy wartość atrybutu
Odnosząc się do teorii, 2 i 3 testu.
Czy można użyć xUnit do przekazania w kolekcjach do atrybutu InlineData?
Dzięki James, jeśli tak jest, to w jaki sposób ludzie zwykle potrzebują zestawu danych testowych w F #? –
Zasugerowałem, że jest to duplikat http://stackoverflow.com/questions/29349152/cannot-create-list-literal-in-f. Jednak to pytanie jest w szczególności, jak stworzyć literalną listę w F # (a odpowiedź brzmi: nie możesz). To pytanie brzmi "Jak mogę użyć xUnit i przekazać na listę danych testowych". Wygląda na to, że @bytebuster ma praktyczną odpowiedź. –
Nie można używać list, ale powinieneś być w stanie używać tablic jak w C#, ale nigdy nie udało mi się go skompilować. Na szczęście staje się to nieistotne, gdy odkryjesz [FsCheck.Xunit] (https://fscheck.github.io/FsCheck/RunningTests.html). –