Можно ли использовать ключевые слова params с DataTestMethod из MSTest? - PullRequest
0 голосов
/ 27 марта 2019

Желая сделать модульный тест красивее, я заменил все параметры одним массивом, используя ключевое слово params. Это дало мне следующее.

[DataRow("field1", "field1", "field2", "field2")]
[DataTestMethod]
[ExpectedException(typeof(InvalidJsonDataFieldException))]
public void Parse_ShouldThrow_GivenOrderIsWrong(params string[] fieldReads)
{
    //Doesn't reach this point
    ...
}

Итак, string fieldRead1, string fieldRead2, string fieldRead3, string fieldRead4 стал params string[] fieldReads, что, я думаю, более аккуратно. Все компилируется, но при запуске теста выдает следующую ошибку и даже не достигает первой строки.

Метод испытания сгенерировал исключение System.Reflection.TargetParameterCountException, но исключение Ожидается MyNamespace.MyException. Сообщение об исключении: System.Reflection.TargetParameterCountException: Nombre de paramètres incorrects.

Так что у него определенно есть проблемы с этим.
Вы знаете, умный поворот, чтобы заставить это работать?
Я знаю, что это не имеет большого значения, но мне все равно любопытно.

1 Ответ

0 голосов
/ 27 марта 2019

Простейшим подходом было бы написание собственного DataRowAttribute:

public class MyDataRowAttribute : DataRowAttribute, ITestDataSource
{
    public MyDataRowAttribute(object data1) : base(data1)
    { }

    public MyDataRowAttribute(object data1, params object[] moreData) : base(data1, moreData)
    { }

    public new IEnumerable<object[]> GetData(MethodInfo methodInfo)
    {
        string[] data = base.Data.Select(x => x.ToString()).ToArray();
        object[] arguments = new object[] { data };

        return new List<object[]> { arguments };
    }
}

Тогда вы можете использовать это так:

[MyDataRow("field1", "field1", "field2", "field2")]
[DataTestMethod]
public void SampleTest(params string[] fieldReads)
{
    Assert.AreEqual(4, fieldReads.Length);
}
...