2016-04-05 3 views
7

Я хочу, чтобы передать массив строки к одному из моего метода испытания XUnit, но когда я просто делаю следующее не работает (массив + PARAMS механизма)Pass массива строки в XUnit метода испытания

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

я могу обойти эту проблему, как это:

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

Но я надеюсь, что там что-то лучше, чтобы решить эту проблему.

Не могли бы вы рассказать мне?

+0

Число строк внутри массива может быть любым. –

+0

это 2018 год, и все же это единственный обходной путь, который сработал для меня. Должен действительно открыть issure для xUnit – yair

+0

исправить этот последний комментарий к WAS единственному обходному пути. Кажется, что на самом деле [прямое решение] (https://stackoverflow.com/a/48100749/978502) – yair

ответ

4

Это функция параметров C#, в которой расширен массив. поэтому xunit не может ввести его в ваш один аргумент, вы можете заставить массив заставить его, например:

[InlineData((object)(new object[] { "2000-01-02", "2000-02-01" }))] см. также here.

+0

Я пробовал это, и он не работает со строкой. –

+0

работает для меня ... вы хотели бы поделиться gist/repo? –

+0

https://gist.github.com/anonymous/af6fc4095705228909de923e25ac0645 –

1

Это должно работать

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

Когда у инициализировать массив объектов, как вы сделали все элементы на ней один объект, поэтому, когда вы пытаетесь передать массив строк в качестве параметра он проходит первый элемент объекта массив, который является «2000-01-02».

2

Использование params перед тем string[] аргумент метода, и тогда вам не нужно инициализировать string[] в InlineData атрибута, а вы могли бы использовать переменное число string литералов, для которых компилятор не жалуется один бит:

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