我正在使用 MSTest 執行一些單元測驗,我了解到我可以使用[DynamicData]屬性輸入不同的案例進行測驗,但我不能使用屬性屬性:DynamicDataDisplayName為不同的案例設定名稱。
我的測驗代碼是:
[TestMethod]
[DynamicData(nameof(TestInputs_BeReady), DynamicDataSourceType.Method,
DynamicDataDisplayName = nameof(GetTestDisplayNames),
DynamicDataDisplayNameDeclaringType = typeof(List<string>))]
public void Should_BeReady(object expValue, object[] inputs)
{
// Arrange
// Act
ui.InputID = (string)inputs[0];
ui.InputName = (string)inputs[1];
ui.InputList = (List<string>)inputs[2];
// Assert
Assert.AreEqual(expValue, onReadyStateChangeArgs.Ready);
}
public static IEnumerable<object[]> TestInputs_BeReady()
{
return new[]
{
new object[] { true, new object[] { "UTSZ0", "Unit Test Size List" , new List<string> { "entry_01", "entry_02" } } },
new object[] { false, new object[] { "STEST", "Unit Test Size List" , new List<string> { "entry_01", "entry_02" } } },
new object[] { false, new object[] { "", "Unit Test Size List" , new List<string> { "entry_01", "entry_02" } } },
new object[] { false, new object[] { "UTSZ0", "" , new List<string> { "entry_01", "entry_02" } } },
new object[] { false, new object[] { "UTSZ0", "Unit Test Size List", new List<string>() } },
new object[] { false, new object[] { "UTSZ0", "Unit Test Size List", null } }
};
}
public static IEnumerable<string> GetTestDisplayNames() => new List<string> {
"All Valid", "Duplicate ID", "Missing ID", "Missing Name", "Empty List", "Null List"
};
我在測驗資源管理器結果中收到了這條訊息:
訊息:值不能為空。
引數名稱:方??法 GetTestDisplayNames
我在網上搜索了如何使用,DynamicDataDisplayName但我無法提供一些東西;我發現的只是如何使用DynamicData
編輯
我使用此代碼為測驗輸入添加自定義名稱,這要歸功于
馬杰·波科爾尼
[TestMethod]
[DynamicData(nameof(TestInputs_BeReady), DynamicDataSourceType.Method,
DynamicDataDisplayName = nameof(GetTestDisplayName))]
public void Should_DoSomething(object expValue, object[] inputs, string _)
{
// Arrange
// Act
// Assert
}
public static IEnumerable<object[]> TestInputs_BeReady()
{
List<string> ITEMS_LIST = new List<string> { "entry_01", "entry_02" };
List<string> BLANK_LIST = new List<string>();
return new[]
{
new object[] { true, new object[] { UQID, NAME, ITEMS_LIST }, "All Valid" },
new object[] { false, new object[] { DPID, NAME, ITEMS_LIST }, "Duplicate ID" },
new object[] { false, new object[] { BLNK, NAME, ITEMS_LIST }, "Missing ID" },
new object[] { false, new object[] { UQID, BLNK, ITEMS_LIST }, "Missing Name" },
new object[] { false, new object[] { UQID, NAME, BLANK_LIST }, "Empty List" },
new object[] { false, new object[] { UQID, NAME, null }, "Null List" }
};
}
uj5u.com熱心網友回復:
問題在于GetTestDisplayNames方法。你應該像這樣定義它
public static string GetTestDisplayNames(MethodInfo methodInfo, object[] values)
{
var expected = (bool)values[0];
var inputs = (object[])values[1];
return $"{methodInfo.Name}({expected}, {inputs.Length})";
}
(這是一種可能的實作,但您當然可以回傳不同的名稱)
此外,引數DynamicDataDisplayNameDeclaringType應該指向型別,GetTestDisplayNames方法定義在哪里。我相信,當您將此方法定義在與測驗方法(Should_BeReady)相同的類中時,可以跳過此引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407859.html
標籤:
上一篇:Mockitowhen()...then()方法沒有回傳預期的模擬物件(回傳null),我做錯了什么?
下一篇:如何每月合并2個不同的查詢
