web-dev-qa-db-fra.com

Passer le tableau de chaîne à la méthode de test xunit

Je veux passer un tableau de chaînes à l'une de mes méthodes de test XUnit, mais quand je fais juste ce qui suit, cela ne fonctionne pas (mécanisme tableau + paramètres)

    [Theory]
    [InlineData(new object[] { "2000-01-02", "2000-02-01" })]
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings)

Je peux contourner le problème comme ceci:

    [Theory]
    [InlineData(0, new object[] { "2000-01-02", "2000-02-01" })]
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(int dummy, string[] dateStrings)

Mais j'espère qu'il y a quelque chose de mieux pour résoudre le problème.

Peux tu me dire?

19
Serge Intern

Utilisez params avant le string[] argument, et vous n'aurez pas besoin d'initialiser un string[] dans l'attribut InlineData, vous pouvez plutôt utiliser un nombre variable de littéraux string, pour lesquels le compilateur ne se plaint pas du tout:

[Theory]
    [InlineData("2000-01-02", "2000-02-01")]
    public void TestSynchronizeMissionStaffing_PeriodNoMatch(params string[] dateStrings)
23
yair

Il s'agit d'une fonctionnalité de paramètres C # dans laquelle un tableau est développé. donc xunit ne parvient pas à le saisir dans votre seul argument, vous pouvez convertir le tableau pour le forcer, comme ceci:

[InlineData((object)(new object[] { "2000-01-02", "2000-02-01" }))] voir aussi ici .

5
robi-y

Vous pouvez utiliser les attributs ClassData ou MemberData. Ceux-ci vous permettent de spécifier une méthode qui renvoie les données dont vous avez besoin

La méthode peut être dans une classe distincte (ClassData) ou une méthode dans la même classe que le test (MemberData)

cela l'explique bien http://hamidmosalla.com/2017/02/25/xunit-theory-working-with-inlinedata-memberdata-classdata/

1
ChrisCa

Cela devrait fonctionner

[Theory]
[InlineData(new object[] { new string[] { "2000-01-02", "2000-02-01" } })]
public void TestSynchronizeMissionStaffing_PeriodNoMatch(string[] dateStrings)

Lorsque vous initialisez un tableau d'objets comme vous l'avez fait pour tous les éléments, c'est un seul objet, donc lorsque vous essayez de passer un tableau de chaînes en paramètre, il passe un premier élément du tableau d'objets qui est "2000-01-02".

0
Magzhan Kydyralin