c# - 为参数化 MSTest 使用自定义类型
问题描述
我正在创建单元测试,并且我想使用自定义类型(如 dto)创建参数化测试。
我想做这样的事情:
[TestMethod]
[DataRow(new StudentDto { FirstName = "Leo", Age = 22 })]
[DataRow(new StudentDto { FirstName = "John" })]
public void AddStudent_WithMissingFields_ShouldThrowException(StudentDto studentDto) {
// logic to call service and do an assertion
}
- 这是你能做的吗?我收到一条错误消息,上面写着“属性参数必须是常量表达式......”我想我在某处看到属性只能将原始类型作为参数?
- 这是错误的方法吗?我应该只传递属性并在测试中创建 dto 吗?
解决方案
这是你能做的吗?我收到一条错误消息,上面写着“属性参数必须是常量表达式......”我想我在某处看到属性只能将原始类型作为参数?
该消息是正确的。无需进一步解释。
这是错误的方法吗?我应该只传递属性并在测试中创建 dto 吗?
您可以使用原始类型并在测试中创建模型。
[TestMethod]
[DataRow("Leo", 22)]
[DataRow("John", null)]
public void AddStudent_WithMissingFields_ShouldThrowException(string firstName, int? age,) {
StudentDto studentDto = new StudentDto {
FirstName = firstName,
Age = age.GetValueOrDefault(0)
};
// logic to call service and do an assertion
}
或者按照评论中的建议,使用[DynamicData]
属性
static IEnumerable<object[]> StudentsData {
get {
return [] {
new object[] {
new StudentDto { FirstName = "Leo", Age = 22 },
new StudentDto { FirstName = "John" }
}
}
}
}
[TestMethod]
[DynamicData(nameof(StudentsData))]
public void AddStudent_WithMissingFields_ShouldThrowException(StudentDto studentDto) {
// logic to call service and do an assertion
}
推荐阅读
- python - 如何根据上述行的值添加新列
- localization - 我们可以使用 moment.js 支持数字本地化吗
- asp.net-core - 使用 UseStatusCodePagesWithReExecute 并显示消息未按预期工作
- c# - 将 XAML 窗口转换为位图
- mysql - mysql 根据输入在列中查找最“真”的行
- appium-android - 无法使用 bat 文件启动 appium 1.9.0
- java - Java http代理SocketException:来自服务器连接重置的文件意外结束
- cassandra - 如何在 cassandra 流式传输时增加每个主机的连接
- react-native - 上下左右阴影宽度不同
- mysql - 在 MySQL 5.7 中找不到与列列表匹配的 FULLTEXT 索引