【问题标题】:How can I pass property as parameter in MSTest DataRow如何在 MSTest DataRow 中将属性作为参数传递
【发布时间】:2017-11-15 01:50:54
【问题描述】:

我在使用 MSTest 的单元测试中有一个 DataTestMethod,我的构造函数中有一个字符串属性,假设我有以下代码:

[DataTestMethod]
[DataRow("test")] 
[DataRow(stringproperty)] // How is this?

public void TestMethod(string test) {
    Assert.AreEqual("test", test);
}

是否可以在 DataRow 中将属性作为参数传递?

谢谢。

【问题讨论】:

  • 简短回答:不!!!!。属性需要常量值。
  • 这似乎是XY problem。您要达到的最终目标是什么?

标签: c# unit-testing mstest


【解决方案1】:

是的,如果你使用 DynamicDataAttribute

[DynamicData("TestMethodInput")]
[DataTestMethod]
public void TestMethod(string test)
{
    Assert.AreEqual("test", test);
}

public static IEnumerable<object[]> TestMethodInput
{
    get
    {
        return new[]
        {
            new object[] { stringproperty },
            new object[] { "test" }
        };
    }
}

【讨论】:

  • 正确但仍然丑陋的技术。
【解决方案2】:
Try this

private List<string> testData=new List<string>();
testData.Add("test");
testData.Add("test1");

private IEnumerable<object[]> ListOfTestData =>
    new List<string[]> 
    {
        new[] {testData[0]},
        new[] {testData[1]}
    };

[DataTestMethod]
[DynamicData (nameof (ListOfTestData))]
public void TestMethod(string test) 
{
    Assert.AreEqual("test", test);
}
Source: https://dev.to/frannsoft/mstest-v2---new-old-kid-on-the-block

【讨论】:

    【解决方案3】:

    作为改进,使用

    [DynamicData(nameof(TestMethodInput))]
    

    而不是[DynamicData("TestMethodInput")]

    稍后在 C# 中引入 nameof 关键字可确保遵循所有重命名重构,并在编译时捕获命名错误。

    【讨论】:

      猜你喜欢
      • 2020-04-21
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多