Czy są jakieś środki w ramach xUnit.net podobne do następujących funkcji NUnit?
[Test, TestCaseSource("CurrencySamples")]
public void Format_Currency(decimal value, string expected){}
static object[][] CurrencySamples = new object[][]
{
new object[]{ 0m, "0,00"},
new object[]{ 0.0004m, "0,00"},
new object[]{ 5m, "5,00"},
new object[]{ 5.1m, "5,10"},
new object[]{ 5.12m, "5,12"},
new object[]{ 5.1234m, "5,12"},
new object[]{ 5.1250m, "5,13"}, // round
new object[]{ 5.1299m, "5,13"}, // round
}
Spowoduje to wygenerowanie 8 oddzielnych testów w interfejsie GUI NUnit
[TestCase((string)null, Result = "1")]
[TestCase("", Result = "1")]
[TestCase(" ", Result = "1")]
[TestCase("1", Result = "2")]
[TestCase(" 1 ", Result = "2")]
public string IncrementDocNumber(string lastNum) { return "some"; }
Spowoduje to wygenerowanie 5 oddzielnych testów i automatyczne porównanie wyników ( Assert.Equal()
).
[Test]
public void StateTest(
[Values(1, 10)]
int input,
[Values(State.Initial, State.Rejected, State.Stopped)]
DocumentType docType
){}
Spowoduje to wygenerowanie 6 testów kombinatorycznych. Bezcenny.
Kilka lat temu wypróbowałem xUnit i pokochałem go, ale brakowało mu tych funkcji. Nie mogę bez nich żyć. Czy coś się zmieniło?
Odpowiedzi:
xUnit oferuje sposób przeprowadzania testów sparametryzowanych poprzez coś, co nazywa się teoriami danych . Koncepcja jest równoważna tej, którą można znaleźć w NUnit, ale funkcjonalność, którą można uzyskać po wyjęciu z pudełka, nie jest tak kompletna.
Oto przykład:
W tym przykładzie xUnit uruchomi
Should_format_the_currency_value_correctly
test raz za każdymInlineDataAttribute
razem, przekazując określoną wartość jako argument.Teorie danych to punkt rozszerzalności , którego można użyć do tworzenia nowych sposobów uruchamiania testów sparametryzowanych. Sposób, w jaki to się robi, polega na tworzeniu nowych atrybutów, które sprawdzają i opcjonalnie działają na argumentach i zwracają wartość metod testowych.
Można znaleźć dobry praktyczny przykład, jak teorie danych xUnit może zostać przedłużony w AutoFixture „s Autodata i InlineAutoData teorii.
źródło
[Theory]
atrybut nie jest dostępny.Rzucę tutaj jeszcze jedną próbkę, na wypadek, gdyby komuś zaoszczędziło to trochę czasu.
źródło
Na pierwsze żądanie możesz postępować zgodnie z przykładami znajdującymi się tutaj .
Możesz skonstruować klasę statyczną zawierającą dane niezbędne do zbioru testów
Następnie za pomocą atrybutu MemberData zdefiniuj test jako taki
lub jeśli używasz C # 6.0,
Pierwszy argument MemberDataAttribute umożliwia zdefiniowanie elementu członkowskiego, którego używasz jako źródła danych, dzięki czemu masz dość dużą elastyczność przy ponownym użyciu.
źródło
Zgodnie z tym artykułem w xUnit masz trzy opcje "parametryzacji":
Przykład InlineData
Przykład ClassData
Przykład MemberData
źródło
Znalazłem bibliotekę, która zapewnia równoważną funkcjonalność
[Values]
atrybutowi NUnit o nazwie Xunit .Pozwala określić wartości na poziomie parametrów:
Lub możesz niejawnie obliczyć minimalną liczbę wywołań, aby objąć wszystkie możliwe kombinacje:
źródło
Wziąłem na pokład wszystkie odpowiedzi tutaj i dodatkowo skorzystałem z
TheoryData<,>
typów ogólnych XUnit, aby dać mi proste, łatwe do odczytania i bezpieczne definicje danych dla atrybutu `` MemberData '' w moim teście, jak na tym przykładzie:NB Korzystanie z VS2017 (15.3.3), C # 7 i XUnit 2.2.0 dla .NET Core
źródło